我正在使用Entity Framework 6.1.1,我有一个Users
表和一个User_Documents
表(1:很多)。我已经有User_Documents
到User
的导航属性,但事情进展顺利。
public partial class User_Document
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long User_Document_ID { get; set; }
public long User_ID { get; set; }
[ForeignKey("User_ID")]
public virtual User User { get; set; }
}
我在Users中添加了一个导航属性到User_Documents
public partial class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long User_ID { get; set; }
[StringLength(50)]
public string Username { get; set; }
public virtual List<User_Document> Documents { get; set; }
}
现在我在尝试运行应用程序时遇到错误:
System.Data.Entity.ModelConfiguration.ModelValidationException:一个或 在模型生成期间检测到更多验证错误:
User_Documents:Name:EntityContainer中的每个成员名称必须是 独特。已定义名为“User_Documents”的成员。
当然有一个名为User_Documents
的表,但没有其他具有该名称的属性。我不确定是什么让它感到困惑。也许它将表名称为“User”和属性名称“Documents”并尝试创建一个名为“User_Documents”的东西?如果我将其重命名为Documents
到这样的Some_Documents
public virtual List<User_Document> Some_Documents { get; set; }
然后我得到一个不同的错误说明
System.InvalidOperationException:支持的模型 'PipeTrackerContext'上下文自数据库以来已发生变化 创建。考虑使用Code First Migrations来更新数据库
所以我运行Add-Migration
,我明白了:
public override void Up()
{
AddColumn("dbo.User_Documents", "User_User_ID", c => c.Long());
CreateIndex("dbo.User_Documents", "User_User_ID");
AddForeignKey("dbo.User_Documents", "User_User_ID", "dbo.Users", "User_ID");
}
为什么要尝试添加名为User_User_ID
的新列?为什么我不能像我想要的那样添加Document
导航属性?
答案 0 :(得分:5)
使用InverseProperty像这样:
public partial class User_Document
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long User_Document_ID { get; set; }
public long User_ID { get; set; }
[ForeignKey("User_ID")]
[InverseProperty("Documents")]
public virtual User User { get; set; }
}
并且:
public partial class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long User_ID { get; set; }
[StringLength(50)]
public string Username { get; set; }
[InverseProperty("User")]
public virtual List<User_Document> Documents { get; set; }
}
答案 1 :(得分:0)
为什么要添加名为User_User_ID的新列?为什么我不能 只需添加我想要的文档导航属性?
按照惯例,它会将外键创建为 tablename_columnName
,即User_User_ID
。当您删除[ForeignKey("User_ID")]
属性或没有外键属性时会发生这种情况。
如果您将属性名称Documents
更改为其他内容(例如UserDocuments
),则不会遇到此名称冲突。