Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建多个表并添加1:1..0关系_C#_Entity Framework - Fatal编程技术网

C# 创建多个表并添加1:1..0关系

C# 创建多个表并添加1:1..0关系,c#,entity-framework,C#,Entity Framework,我基本上是个新手,所以我希望能对我的代码发表一些评论,因为我在这里自学。如果我做得正确,我想得到一些关于我的关系映射的反馈,因为我现在还不确定。(关于如何更正确地检查此项的任何提示,我本人也欢迎!) 我有一个用户数据库,但我的一些用户是供应商。当然,这是一种选择。起初我只是想给它分配一个bool来存储在我的数据库中,但现在我正在扩展它,以便我的供应商可以得到评论 我就是这样做的。 我的供应商模型: public partial class Suppliers { publ

我基本上是个新手,所以我希望能对我的代码发表一些评论,因为我在这里自学。如果我做得正确,我想得到一些关于我的关系映射的反馈,因为我现在还不确定。(关于如何更正确地检查此项的任何提示,我本人也欢迎!)

我有一个用户数据库,但我的一些用户是供应商。当然,这是一种选择。起初我只是想给它分配一个bool来存储在我的数据库中,但现在我正在扩展它,以便我的供应商可以得到评论

我就是这样做的。 我的供应商模型:

    public partial class Suppliers
    {
    public Suppliers()
    {
        Id = GuidComb.GenerateComb();
    }
    public Guid Id { get; set; }
    public virtual IList<SupplierReview> SupplierReviews { get; set; }
    public virtual MembershipUser user { get; set; }
    }
然后在我添加的成员模型中:

    public virtual IList<SupplierReview> SupplierReviews { get; set; }
    public virtual Suppliers IsSupplier { get; set; }

谢谢你通读到这里。因此,我的疑问在于映射是否正确,如果我正确使用了WillCascadeOnDelete?

有些映射是基于意见的,这意味着有时没有“正确答案”。如果我正确理解您的场景,我建议您进行以下更改:

  • 如果
    用户
    可以是
    供应商
    ,但并非所有供应商都是
    用户

    public class MembershipUser
    {
        public Guid MembershipUserId { get; set; }
    
        public IsSupplier { get; set; } //I like to have a discriminator field
    
        //if it is a supplier, there is a relationship with the supplier table
        //it it is not, the property will be null
        public Supplier Supplier { get; set; } 
    }
    
    public class Supplier
    {
         //pk 
         public Guid SupplierId { get; set; }             
    
         //navigation property
         public MembershipUser User { get; set; }
    
         //... other properties
    }
    
    public class Supplier
    {
        //The SupplierPK must be the MembershipUser Fk
        public Guid MembershipUserId { get; set; }             
    
        //navigation property, in case of the supplier is an user
        public MembershipUser User { get; set; }
    
        //... other properties
    }
    
    映射:

     modelBuilder.Entity<MembershipUser>()
         .HasKey(i => i.MembershipUserId);
    
     modelBuilder.Entity<MembershipUser>()
        .HasOptional(i => i.Supplier)
        .WithOptionalPrincipal(i => i.User)
        .Map(i => i.MapKey("MemberhsipUserId"))
        .WillCascadeOnDelete(false);
    
     modelBuilder.Entity<Supplier>()
        .HasKey(i => i.SupplierId);
    
    modelBuilder.Entity<MembershipUser>()
       .HasOptional(i => i.Supplier)
       .WithRequired(i => i.User)
       .WillCascadeOnDelete(false);
    
    映射:

     modelBuilder.Entity<MembershipUser>()
         .HasKey(i => i.MembershipUserId);
    
     modelBuilder.Entity<MembershipUser>()
        .HasOptional(i => i.Supplier)
        .WithOptionalPrincipal(i => i.User)
        .Map(i => i.MapKey("MemberhsipUserId"))
        .WillCascadeOnDelete(false);
    
     modelBuilder.Entity<Supplier>()
        .HasKey(i => i.SupplierId);
    
    modelBuilder.Entity<MembershipUser>()
       .HasOptional(i => i.Supplier)
       .WithRequired(i => i.User)
       .WillCascadeOnDelete(false);
    

    希望有帮助

    嘿,首先非常感谢您审阅我的代码,我非常感谢!我之所以将MembershipUser添加到SupplierReview中,是因为供应商从标准用户处获得了一个审查,以便我可以收集使用我的网站的供应商的质量/交货时间/价格/响应数据。因此,审查是关于供应商的,由用户进行。
    modelBuilder.Entity<MembershipUser>()
       .HasOptional(i => i.Supplier)
       .WithRequired(i => i.User)
       .WillCascadeOnDelete(false);
    
    modelBuilder.Entity<SupplierReview>()
      .HasRequired(i => i.Supplier)
      .WithMany(i => i.SupplierReviews)
      .HasForeignKey(i => i.SupplierId)
      .WillCascadeOnDelete(false);