我有以下课程:

房东

[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/

10-10 10:25