【问题标题】:Code-First Referencing Table代码优先参考表
【发布时间】:2012-07-23 02:41:12
【问题描述】:

我目前正在为我的模型上的一些映射属性而苦苦挣扎。这是我的两个模型。 我要做的是在我的表中只有唯一的 PersonTypes(即 MD、Nurse),并且人员模型引用这些 personTypes。

public partial class Person
{
    public Person()
    {
        this.PersonTypes = new List<PersonType>();
        this.Contacts = new List<Contact>();
    }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int FacilityId { get; set; }

    [DataType(DataType.Text), MaxLength(200), Required]
    public string FirstName { get; set; }

    [DataType(DataType.Text), MaxLength(200)]
    public string MiddleName { get; set; }

    [DataType(DataType.Text), MaxLength(200), Required]
    public string LastName { get; set; }

    public int? SpecialtyId { get; set; }

    public bool IsEnabled { get; set; }

    // Mapped Properties

    [ForeignKey("FacilityId")]
    public virtual Facility Facility { get; set; }

    [ForeignKey("SpecialtyId")]
    public virtual Specialty Specialty { get; set; }

    public virtual ICollection<PersonType> PersonTypes { get; set; }

    public virtual ICollection<Contact> Contacts { get; set; }
}

public partial class PersonType
{
    public PersonType()
    {
    }

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [DataType(DataType.Text), MaxLength(200), Required]
    public string Name { get; set; }

    public bool IsEnabled { get; set; }
}

Person1 = MD,护士 - Person2 = MD - Person3 = Nurse,CNP

我不想在我的 PersonType 表中出现 2 次以上示例中的 MD。这可能吗。谢谢。

【问题讨论】:

  • “我得到重复”是什么意思?你能展示产生它们的代码吗?
  • 所以您不想找到PersonMD 的吗?您只想在Person 上指定一个属性,指定它是哪个PeronsType?那就是一个简单的PersonType 枚举。你不需要PersonType 表。

标签: asp.net-mvc-3 entity-framework ef-code-first code-first


【解决方案1】:

从您的示例中,我了解到您在 Persons 和 PersonTypes 之间存在多对多关系。要让 EF CodeFirst 理解这一点,您必须在 PersonType 中创建对称导航属性:public virtual ICollection&lt;Person&gt; Persons

【讨论】:

  • 当然是多对多,但在代码优先中还有更多的方式来表达这些。我更喜欢PersonType 没有Persons 集合的模型。
  • 我已经尝试过了,但我的 PersonType 表中有重复项。我想保持 PersonType 干净,没有重复,只是一个带有项目的普通表。我几乎需要一个带有 PersonId、PersonTypeId 的参考表?
  • @GertArnold 据我所知,只有另一种表达多对多的方式,它需要在代码中配置 (HasMany().WithMany())。我觉得很好,但解释起来有点困难。
  • @SergRogovtsev,是的,我会这样做。 Joshua:是的,对于唯一实体之间的多对多,您将需要一个您所描述的连接表。
猜你喜欢
  • 2011-10-22
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多