d51*_*512 5 c# entity-framework code-first
我正在使用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; }
}
Run Code Online (Sandbox Code Playgroud)
我从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; }
}
Run Code Online (Sandbox Code Playgroud)
现在我在尝试运行应用程序时遇到错误:
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; }
Run Code Online (Sandbox Code Playgroud)
然后我得到一个不同的错误说明
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");
}
Run Code Online (Sandbox Code Playgroud)
为什么要尝试添加一个名为User_User_ID?的新列?为什么我不能Document像我想要的那样添加导航属性?
使用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; }
}
Run Code Online (Sandbox Code Playgroud)
而且:
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; }
}
Run Code Online (Sandbox Code Playgroud)