假设我有以下两种模型:
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public Blog Blog { get; set; }
}
现在,如果我想在DbContext中配置模型关系,那么在以下几个方面有什么不同:
modelBuilder.Entity<Post>()
.HasOne(p => p.Blog)
.WithMany(b => b.Posts);
和
modelBuilder.Entity<Blog>()
.HasMany(b => b.Posts)
.WithOne(p => p.blog);
如果有什么不同,那是什么呢?我应该同时写,还是只写一封?
作为附带说明:,我必须定义外键吗?根据我对数据库的了解,没有外键就不能创建关系,但是EF并不要求您有外键字段。那么EF如何处理不知道外键的关系呢?它会导致性能下降还是错误?
发布于 2016-09-30 01:21:42
没错,您可以在数据库中不使用外键在DbContext中创建关系。
另外:
WithOne:一对一的关系在双方都有一个引用导航属性。它们遵循与一对多关系相同的约定,但在外键属性上引入了唯一的索引,以确保每个主体只关联一个依赖项。
多到多:没有实体类来表示联接表的关系还不受支持。但是,您可以通过为联接表包括一个实体类和映射两个单独的一对多关系来表示多到多的关系。
您只需要定义一个关系,因为在某些情况下,您将为没有导航属性(一个或集合)的父子关系创建一个关系。
对于您的示例:您为博客->文章添加了一个关系,因为您在两个对象中都有导航属性,这两行的内容是相同的,但方式不同:
https://stackoverflow.com/questions/39781996
复制相似问题