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