让我试着用简单的方式来解释这一点。告诉modelBuilder不要假设财产是逆向导航财产
我有这样的:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<EntityTrackHistory> Histories { get; set; }
}
注意EntityTrackHistory
也作为对其他实体的ICollection
:这是包含在我User
表这样
public class EntityTrackHistory
{
public int Id { get; set; }
public virtual User ModifiedBy { get; set; }
public DateTime ModifiedDate { get; set; }
}
。
现在建立我的数据库后,我得到*_Id
字段和外键的所有这些实体,包括EntityTrackHistory
集合正确。
但是,由于其中一个表为User
,因此在创建数据库时,模型构建器认为ModifiedBy
属性是User
表的逆导航属性,事实并非如此。
的一种方法来解决它是加入第二虚拟财产到User
实体与User
名称(使用该名称或告诉modelBuilder
它的逆导航属性):
public class EntityTrackHistory
{
public int Id { get; set; }
public virtual User ModifiedBy { get; set; }
public DateTime ModifiedDate { get; set; }
public virtual User User { get; set; }
}
这工作,和EF正确地假定User
是逆导航属性,ModifiedBy
是不同的“用户”。
但是,我根本不打算使用该导航属性(意思是说,每次访问EntityTrackHistory
时,我都会从原始实体执行此操作),并且我想告诉EF ModifiedBy
不应该是逆导航属性。
在我的脑海里,'解决方案'不起作用,因为我修改我的实体只是为了解决EF部分的一些约定(我的模型应该是EF-agnostic)。
我发现如何(在这种情况下,或反的,等等)映射属性和导航属性的信息,但我还没有找到如何告诉EF 不相信一个字段是一个反向信息导航属性只是按照约定(因为在这种情况下的实体类型)。
任何帮助?
作品!谢谢 – Jcl 2014-09-19 10:00:31