【问题标题】:Entity Framework Code First Relationship Without Foreign Key没有外键的实体框架代码优先关系
【发布时间】:2016-08-02 20:08:36
【问题描述】:

我是 ORM 工具的新手,我只想通过命名约定来处理表之间的关系。例如,如果我有如下课程;

public class City
{
    public int Id;
    public string Name;
}

public class District 
{
    public int Id;
    public string Name;
    public City City;
}

我想像这样在我的数据库中映射这些类。

City
   Id int,
   Name nvarchar(100)

District
   Id int,
   Name nvarchar(100),
   CityId int

我不想使用外键,当我将任何类作为属性放在另一个类中时,我想将这些属性迁移为“ClassNameId”。有什么解决办法吗?

【问题讨论】:

    标签: entity-framework code-first


    【解决方案1】:

    您的关系设计不适合使用 EF。

    正确的关系是

    public class City
    {
        public int Id;
        public string Name;
    
        public virtual ICollection<District> Districts;
    }
    
    public class District 
    {
        public int Id;
        public string Name;
        public int CityId;
        public virtual City City;
    }
    

    在实体配置中,您需要在 EntityTypeConfiguration 上进行城市定义:

      public DistrictConfiguration()
            {
                HasKey(a => a.Id);
    
                HasRequired(a => a.City)
                    .WithMany(a => a.Districts)
                    .HasForeignKey(a => a.CityId);
    
    
                 ToTable("District");
            }
    

    【讨论】:

    • 如果像这样 EF 进行配置,我认为会在 DB 中创建外键。我错了吗?
    • 我在模型中进行了更改,因为与我之前的想法相反,查看结构,实体 District 需要一个 Key 来与 City 建立关系,如果您不指定,EF 会使用 EF 名称默认创建规格。
    • 感谢您的回复和更新。对我来说,哪个实体与另一个实体相关并不重要。我的问题是我不想使用外键约束,例如,如果我查询一个地区,我想在其属性@NIZZOLA 中获取地区城市
    • 如果你不想用fk,EF的关系不成立!很多时候,如果我忘记做正确的规范,EF 会创建字段来改进这一点。
    • 如果我没有弄错 Nhibernate,则可以创建没有外键约束的关系。我想知道 EF 是否有能力实现此目的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2011-07-28
    • 2015-03-26
    • 2011-08-05
    • 1970-01-01
    • 2012-10-11
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多