gpt4 book ai didi

c# - 如何在 EF 6.1 CodeFirst 中的 View 上添加导航属性

转载 作者:太空狗 更新时间:2023-10-30 01:19:24 25 4
gpt4 key购买 nike

让我们举个例子来解释我的问题。


MyTable1

+编号

+我的表2Id


MyTable2

+编号


MyView1

+编号

+我的表2Id


MyView1存在的情况下,来自MyTable1的数据。现在我想从我的 View 中的 EF6.1 代码优先方法创建一个导航属性到 MyTable2。

我知道从数据库优先的方法是可行的,但代码优先的方法是否也可行?如何实现?

编辑:

我在网上搜索了一些,但是由于View这个词的含义很多,所以很难找到相关信息。

另外,使用我尝试过的代码中的方法,我总是会收到无法完成迁移的错误消息。因为迁移尝试向 View 添加外键,这是不可能的。

编辑2:

详细说明我的解释。我希望能够通过以下方式在代码中处理它:

Guid table2Id = context.MyView1.FirstOrDefault().MyTable2.id;

编辑 3:

我会详细说明一下,看看能否更好地解释我的问题。

当我将以下内容添加到我的 View 实体时:

public virtual MyTable2 Table2 { get; set;}

EF 将自动生成以下迁移:

public override void Up() {
CreateIndex("MyView1", "MyTable2Id");
AddForeignKey("MyView1", "MyTable2Id", "MyTable2", "id")
}

运行更新数据库时出现以下错误:

“无法在 View 'MyView1' 上创建索引,因为该 View 未绑定(bind)架构”

编辑4:

在评论的帮助下,迁移不是一成不变的……而且是多变的,我做到了。

我使用了以下 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);

并将我的表更改为:(FK 到 MyTable2 并从 View 中删除)


MyTable1

+编号


MyTable2

+编号+我的表1


MyView1

+编号


最后哪个更好,因为这样我的模型中的 Null 值就更少了。

最佳答案

在 EF 中,您可以使用数据库 View 并将其映射到实体并像处理表一样引用它。对于代码优先过程,您必须在 Up 中创建 View 并将其放入迁移类的 Down 方法中:

public partial class AddView : DbMigration
{
public override void Up()
{
this.Sql(@"CREATE VIEW MyView1 AS ....");
}
public override void Down()
{
this.Sql(@"DROP VIEW MyView1....");
}
}

编辑:

public long myTable2Id { get; set; }

[ForeignKey( "myTable2Id" )]
public virtual MyTable2 Table2 {get;set;}

关于c# - 如何在 EF 6.1 CodeFirst 中的 View 上添加导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22998430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com