C# 实体框架中的1到0..1关系
我想创建以下关系。显然,这是痛苦的基础,但我在第一个障碍下降感谢EF。在我的数据库C# 实体框架中的1到0..1关系,c#,asp.net-mvc-3,entity-framework,entity-framework-4.1,C#,Asp.net Mvc 3,Entity Framework,Entity Framework 4.1,我想创建以下关系。显然,这是痛苦的基础,但我在第一个障碍下降感谢EF。在我的数据库子表单中的主键Id,是引用应用程序.Id(强制关系)的外键。当我添加一个新的应用程序时EF抱怨我没有子表单Id行,我不希望这样,因为这显然是主键的重复。我可以给模型添加一些注释来解决这个问题吗 这给我带来了另一个问题,如果我想同时向数据库添加一个新的应用程序和一个新的子表单,我如何才能获得应用程序Id(它在数据库中定义为自动增量int)来在子表单对象上设置它,或者EF可以为我这样做吗 如果您有SubForm类型的
子表单中
的主键Id
,是引用应用程序.Id
(强制关系)的外键。当我添加一个新的应用程序时
EF抱怨我没有子表单Id
行,我不希望这样,因为这显然是主键的重复。我可以给模型添加一些注释来解决这个问题吗
这给我带来了另一个问题,如果我想同时向数据库添加一个新的应用程序和一个新的子表单
,我如何才能获得应用程序Id
(它在数据库中定义为自动增量int)来在子表单
对象上设置它,或者EF可以为我这样做吗
如果您有SubForm
类型的导航属性,则按惯例,EF假定您的应用程序表具有标量属性子表单Id
。您需要显式配置共享主键映射
public class MyContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Application>()
.HasOptional(a => a.SubForm)
.WithRequired(s => s.Application);
}
}
您是否将EF 4.1与DbContext API一起使用?这已经起作用了,谢谢。我假设不可能添加根实体应用程序并因此添加子表单对象?如果这是正确的,为什么会是这种情况?@st3它可能工作var app=new Application{SubForm=new SubForm()};db.Applications.Add(app)代码>
var app = new Application();
var subForm = new SubForm { Application = app };
db.SubForms.Add(subForm);
db.SaveChanges();