gpt4 book ai didi

entity-framework - 如何使用 Code-First 注释父子关系

转载 作者:行者123 更新时间:2023-12-03 14:13:43 29 4
gpt4 key购买 nike

当使用 Entity Framework 代码优先库的 CTP 5(如宣布的 here )时,我正在尝试创建一个映射到一个非常简单的层次结构表的类。

这是构建表的 SQL:

CREATE TABLE [dbo].[People]
(
Id uniqueidentifier not null primary key rowguidcol,
Name nvarchar(50) not null,
Parent uniqueidentifier null
)
ALTER TABLE [dbo].[People]
ADD CONSTRAINT [ParentOfPerson]
FOREIGN KEY (Parent)
REFERENCES People (Id)

这是我希望自动映射回该表的代码:
class Person
{
public Guid Id { get; set; }
public String Name { get; set; }
public virtual Person Parent { get; set; }
public virtual ICollection<Person> Children { get; set; }
}

class FamilyContext : DbContext
{
public DbSet<Person> People { get; set; }
}

我在 app.config 文件中设置了连接字符串,如下所示:
<configuration>
<connectionStrings>
<add name="FamilyContext" connectionString="server=(local); database=CodeFirstTrial; trusted_connection=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>

最后,我尝试使用该类添加一个父实体和一个子实体,如下所示:
static void Main(string[] args)
{
using (FamilyContext context = new FamilyContext())
{
var fred = new Person
{
Id = Guid.NewGuid(),
Name = "Fred"
};
var pebbles = new Person
{
Id = Guid.NewGuid(),
Name = "Pebbles",
Parent = fred
};
context.People.Add(fred);
var rowCount = context.SaveChanges();
Console.WriteLine("rows added: {0}", rowCount);
var population = from p in context.People select new { p.Name };
foreach (var person in population)
Console.WriteLine(person);
}
}

这里显然缺少一些东西。我得到的异常(exception)是:

Invalid column name 'PersonId'.



我了解约定优于配置的值(value),我和我的团队对摆脱 edmx/设计师噩梦的前景感到兴奋 --- 但似乎没有关于约定是什么的明确文件。 (对于单数类名,我们只是幸运地使用了复数表名的概念)

一些关于如何使这个非常简单的例子落实到位的指导将不胜感激。

更新:
将 People 表中的列名从 Parent 更改为 PersonId 允许添加 fred继续。但是你会注意到 pebbles被添加到 fred 的 Children 集合中所以我希望在添加 Fred 时也会将鹅卵石添加到数据库中,但事实并非如此。这是一个非常简单的模型,所以我有点沮丧的是,将几行输入数据库应该涉及这么多的猜测工作。

最佳答案

在 Entity Framework 6 中你可以这样做,注意 public Guid? ParentId { get; set; } .外键必须可以为空才能正常工作。

class Person
{
public Guid Id { get; set; }
public string Name { get; set; }
public Guid? ParentId { get; set; }
public virtual Person Parent { get; set; }
public virtual ICollection<Person> Children { get; set; }
}

https://stackoverflow.com/a/5668835/3850405

关于entity-framework - 如何使用 Code-First 注释父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4461762/

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