gpt4 book ai didi

entity-framework - EF 4.1 映射问题

转载 作者:行者123 更新时间:2023-12-04 11:30:03 25 4
gpt4 key购买 nike

我有一个与自身有关系的类:

public class Person
{
public long ID { get; set; }
public string Name { get; set; }

public virtual Person Mother { get; set; }
public virtual Person Father { get; set; }
}

当 EF 4.1 尝试映射此类时,我收到以下错误:
'无法确定类型 'Model.Person' 和 'Model.person' 之间关联的主要端。必须使用关系流畅 API 或数据注释显式配置此关联的主体端。

我已经尝试过题目的解决方案 EF 4.1 - Model Relationships没有成功。

我该如何解决?

谢谢!

最佳答案

因为它自然是一对多的关系(一个人必须有一个父亲和一个母亲,但可以有很多儿子和女儿)我会这样建模:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasRequired(p => p.Father)
.WithMany();

modelBuilder.Entity<Person>()
.HasRequired(p => p.Mother)
.WithMany();
}

这将在名为 Mother_ID 的数据库表中创建两个必需的外键。和 Father_ID按照惯例。

编辑

如果你想创造没有 parent 的人,你可以建立关系 可选 而不是必需的:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasOptional(p => p.Father)
.WithMany();

modelBuilder.Entity<Person>()
.HasOptional(p => p.Mother)
.WithMany();
}

那么数据库表中的外键是可以为空的。

如果您不喜欢外键的默认列名( Mother_IDFather_ID ),您可以自定义映射中的列名:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasOptional(p => p.Father)
.WithMany()
.Map(m => m.MapKey("FatherID"));

modelBuilder.Entity<Person>()
.HasOptional(p => p.Mother)
.WithMany()
.Map(m => m.MapKey("MotherID"));
}

关于entity-framework - EF 4.1 映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com