2013-12-18 56 views
0

当我使用一个简单的主 - 详细信息关系实体框架代码优先数据注释:自参照

public class Master 
{ 
    public long ID { get; set; } 
    public virtual Detail Detail { get; set; } 
} 

public class Detail 
{ 
    public long ID { get; set; } 
} 

代码首先创建数据模型我希望:外主表引用内部细节。当我改变它的方式,法师引用自身

public class Master 
{ 
    public long ID { get; set; } 
    public virtual Master Inner { get; set; } 
} 

代码首先创建一个数据模型,其中内主引用外高手。为什么在这种情况下表现实体框架不同?我可以用数据注释纠正这个问题吗(避免流利的API)?

+0

如果我正确地得到了您的问题,我相信它可以使用InverseProperty注释完成,例如http://stackoverflow.com/questions/5691780/navigation-property-without-declaring-foreign-key – hyperN

+0

这可能有助于http:///msdn.microsoft.com/en-us/data/jj713564和http://msdn.microsoft.com/en-us/data/jj591583 –

+0

InverseProperty不起作用。它似乎只与ICollection一起工作。请参阅http://stackoverflow.com/questions/18625631/ef-4-4-inverseproperty-does-not-quite-inverse – StefanG

回答

0

实体框架工作正确。你可以通过添加一个Value属性来看到这一点:

public class Master 
{ 
    public long ID { get; set; } 
    **public string Value { get; set; }** 
    public virtual Master Inner { get; set; } 
} 

所有实体框架所做的,都是颠倒对象的顺序。根对象具有最高ID ,而最内部对象是以ID = 0开始的对象。(想想看,为什么EF这么做很明显)。

所以,我刚刚误解了数据。