我有以下课程:
房东
[Table("Landlord")]
public class Landlord : UserProfile
{
public static int LandlordProfileViews { get; set; }
// A Landlord can have many ResidentialProperties
[ForeignKey("ResidentialPropertyId")]
public virtual ICollection<ResidentialProperty> ResidentialProperties { get; set; }
}
住宅物业
[Table("ResidentialProperty")]
public class ResidentialProperty
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ResidentialPropertyId { get; set; }
// ...
// A ResidentialProperty has 1 Landlord
[ForeignKey("UserId")]
public int UserId { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
房东可以拥有许多住宅物业,因此该关联是一对多的。我正在尝试使用
Seed()
方法将测试数据添加到我的数据库中。我的问题是我不知道如何在方法中定义关系的多个末端。以下是我尝试过的方法:var residentialProperties = new List<ResidentialProperty>
{
// Property 1 associated with LandLord 1
new ResidentialProperty { /* properties */ },
// ...
}
var landlords = new List<Landlord>
{
new Landlord { /* properties */ ResidentialProperties = residentialProperties.FirstOrDefault(x => x.ResidentialPropertyId == 1) },
// ...
}
ResidentialProperties = residentialProperties.FirstOrDefault(x => x.ResidentialPropertyId == 1)
给出了“无法将类型ResidentialProperty隐式转换为ICollection 错误。如何在Seed()方法中实现一对多关系?
编辑:
我在上下文类中添加了以下内容,以尝试实现这种类型的关系:房东可以拥有许多ResidentialProperty。住宅物业只能有一位房东:
modelBuilder.Entity<Landlord>()
.HasMany(x => x.ResidentialProperties)
.WithRequired()
.HasForeignKey(x => x.ResidentialPropertyId);
modelBuilder.Entity<ResidentialProperty>()
.HasRequired(x => x.UserProfile);
我仍然收到此错误:
\ tSystem.Data.Entity.Edm.EdmAssociationEnd::多重性不是
在关系中的角色“ Landlord_ResidentialProperties_Target”中有效
“ Landlord_ResidentialProperties”。因为从属角色是指
关键属性,即多重性的上限
从属角色必须为“ 1”。
至于我在做什么错,仍然茫然。
最佳答案
您需要返回ResidentalProperties的列表。您具有ResidentialProperties = residentialProperties.FirstOrDefault(x => x.ResidentialPropertyId == 1)
的查询仅返回单个ResidentialProperty实体。只要做ResidentialProperties = residentialProperties
编辑:您可以通过单个配置进行多对一设置。您还必须指定外键。
//ResidentialProperty has 1 Landlord ,
//Landlord has many ResidentialProperties
modelBuilder.Entity<ResidentialProperty>().HasRequired(a=> a.UserProfile)
.WithMany(c=> c.ResidentialProperties)
.HasForeignKey(a=> a.UserId);
关于c# - Entity Framework -在Seed()方法中实现一对多外键关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14865641/