Ada*_*dam 6 c# entity-framework
(实体框架6,.NET 4,VS 2010)
我创建了一个小型的Blog项目来说明问题.这是一个博客,有很多帖子,但只有一个帖子作为主要帖子.
public class Blog
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Post> PostEntities { get; set; }
public int? MainPostId { get; set; }
[ForeignKey("MainPostId")]
public virtual Post MainPostEntity { get; set; } // Problem here
}
public class Post
{
public int Id { get; set; }
public int BlogId { get; set; }
[ForeignKey("BlogId")]
public virtual Blog BlogEntity { get; set; }
public string Title { get; set; }
}
modelBuilder.Entity<Blog>()
.HasOptional(b => b.MainPostEntity)
.WithRequired(p => p.BlogEntity);
static void Main(string[] args)
{
Database.SetInitializer<EFTestContext>(null);
EFTestContext db = new EFTestContext();
Post[] posts = db.Posts.ToArray(); // Error here
}
Run Code Online (Sandbox Code Playgroud)
如果我删除导航属性,public virtual Post MainPostEntity一切都按预期工作.但是,当我添加它时,我得到:
base {System.SystemException} = {"The ForeignKeyAttribute on property 'MainPostEntity' on type 'EFTest.Blog' is not valid. The foreign key name 'MainPostId' was not found on the dependent type 'EFTest.Post'. The Name value should be a comma separated list of foreign key property names."}
如果我删除了流畅的API调用,我会得到 {"Invalid column name 'Blog_Id'."}
如果我将属性更改[ForeignKey("MainPostId")]为[ForeignKey("Id")]I,则会出现以下错误{"Invalid column name 'Blog_Id'."}
我究竟做错了什么?如何从Blog启用导航属性到主帖?
您遇到的问题是,您在相同的两个表之间创建两个关系,而 EF 无法区分导航属性BlogEntity属于哪个关系。使用 Fluent api,您可以明确地告诉它,这样就不需要数据注释了。
modelBuilder.Entity<Blog>().HasMany(b => b.PostEntities).
WithRequired(p => p.BlogEntity).
HasForeignKey(p => p.BlogId).
WillCascadeOnDelete(true);
modelBuilder.Entity<Blog>().HasOptional(b => b.MainPostEntity).
WithMany().
HasForeignKey(b => b.MainPostId).
WillCascadeOnDelete(false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |