C# 在Entity Framework 6的孙子表中自动设置外键
假设我有以下对象C# 在Entity Framework 6的孙子表中自动设置外键,c#,.net,asp.net-mvc,entity-framework,entity-framework-6,C#,.net,Asp.net Mvc,Entity Framework,Entity Framework 6,假设我有以下对象 public class MyParent { public long Id { get; set; } public string Name { get; set; } } public class MyChild { public long ParentId; public virtual Parent Parent; public long Id { get; set; } public string Name { get
public class MyParent {
public long Id { get; set; }
public string Name { get; set; }
}
public class MyChild {
public long ParentId;
public virtual Parent Parent;
public long Id { get; set; }
public string Name { get; set; }
}
public class MyGrandChild{
public long ParentChildId;
public virtual MyChild ParentChild;
public long Id { get; set; }
public string Name { get; set; }
}
现在MyParent是顶级对象,是MyChild的子对象,MyChild是My孙子的子对象
在创建的表中,我得到
MyParent
--Id
--Name
MyChild
-- ParentId
-- Id
-- Name
MyGrandChild
-- ParentChildId
-- Id
-- Name
现在,在My孙子表中有MyParent的外键将非常有用
我已尝试将My孙子对象更改为此
public class MyGrandChild{
public long ParentId;
public virtual MyParent Parent;
public long ParentChildId;
public virtual MyChild ParentChild;
public long Id { get; set; }
public string Name { get; set; }
}
但是cascase delting出现了一个错误,我不得不添加以下fluentAPI
modelBuilder<MyGrandChild>()
.HasRequired(e => e.Parent)
.WithMany()
.HasForeignKey(e => e.ParentId)
.WillCascadeOnDelete(false);
modelBuilder()
.has必需(e=>e.Parent)
.有很多
.HasForeignKey(e=>e.ParentId)
.WillCascadeOnDelete(假);
现在可以了,但它迫使我必须手动设置my孙子的.Parent属性
有没有一种方法可以告诉entity framework我想存储一个父-父外键并手动设置它?当您说“现在,将MyParent的外键放在My孙子表中会非常有用”时,您的意思是什么?为什么它会有用?当您需要该属性时,您是否可以只转到My孙子女.Parent.Id?您已经创建了一个全新的不相关关系,没有任何东西可以将
My孙子女.Parent
约束到与My孙子女.ParentChild.Parent
相同的实体。但是,我根本看不到此属性的值,您可以访问my孙子.ParentChild.Parent
。