更新 决定重写这个问题,因为它不是很清楚。
如果我有A类并且给它一个无键类B的引用,而不是B类变成它自己的表,它的所有列都将显示在A类的表上 - 这就是我想要的。 但现在我希望B持有对C类的引用,C类有自己的表和键。我现在期望的是,表A显示B的属性以及保存C键的列。但是当我添加此引用时,它告诉我B没有定义键,因此它不起作用。
public class A
{
[Key]
public virtual int AId { get; set; }
public virtual B b{ get; set; }
}
public class B
{
public bool Fixed { get; set; }
public virtual C c{ get; set; }
}
public class C
{
[Key]
public virtual int CId { get; set; }
}
结束表的外观示例:
[AId]
,[Fixed]
,[CId]
FROM [A]
我有一种感觉这是一个非常基本的问题,但我无法在任何地方找到答案。我想要做什么工作?
答案 0 :(得分:0)
您可以将结束表定义为视图。如果采用这种方法,B还需要Key定义,然后为视图创建一个实体,如:
public class ABCView
{
public virtual int AId { get; set; }
public bool Fixed { get; set; }
public virtual int CId { get; set; }
}
您需要创建如下视图:
string script =
@"
CREATE VIEW dbo.ABCView
AS SELECT a.AId,b.Fixed,c.CId
FROM dbo.a a
LEFT JOIN dbo.b b ON a.b_BId = b.BId
LEFT JOIN dbo.c c ON b.c_CId = c.CId";
db.Database.ExecuteSqlCommand(script);
然后加载视图,如:
var abcItem = db.Database.SqlQuery<ABCView>("Select * from dbo.ABCView").FirstOrDefault(abc => abc.AId == 1);
在上面的示例中,我使用的是AId 1