让我们举一个例子来解释我的问题。
MyTable1
+id
+myTable2Id
MyTable2
+id
MyView1
+id
+myTable2Id
案例中存在MyView1,来自MyTable1的数据。现在我想从视图中的 EF6.1 代码优先方法创建一个导航属性到 MyTable2。
我知道可以通过数据库优先方法实现,但是通过代码优先方法也可以实现吗?如何实现?
EDIT:
我在互联网上搜索了一些,但由于“视图”一词的含义很多,因此很难找到有关它的信息。
另外,使用我尝试的代码中的方法,我总是收到迁移无法完成的错误。因为迁移尝试向视图添加外键,这是不可能的。
EDIT2:
详细说明我的解释。我希望能够通过以下方式在代码中处理它:
Guid table2Id = context.MyView1.FirstOrDefault().MyTable2.id;
EDIT3:
我将详细说明一下,看看是否可以更好地解释我的问题。
当我将以下内容添加到我的视图实体时:
public virtual MyTable2 Table2 { get; set;}
EF会自动生成以下迁移:
public override void Up() {
CreateIndex("MyView1", "MyTable2Id");
AddForeignKey("MyView1", "MyTable2Id", "MyTable2", "id")
}
运行 update-database 时出现以下错误:
“无法在视图“MyView1”上创建索引,因为该视图未绑定架构”
EDIT4:
在评论的帮助下,迁移不是一成不变的......并且是可变的,我做到了。
我使用了以下 FluentAPI:
// Map one-to-zero or one relationship
modelBuilder.Entity<MyTable2>()
.HasRequired(t => t.MyTable1)
.WithOptional(t => t.MyTable2);
modelBuilder.Entity<MyTable1>()
.HasOptional(t => t.MyTable2);
并将我的表更改为:(MyTable2 的 FK 并从视图中删除)
MyTable1
+id
MyTable2
+id
+我的表1
MyView1
+id
最终哪个更好,因为这样我的模型中的空值就会更少。