gpt4 book ai didi

c# - 数据库第一种方法中缺少 Entity Framework 导航属性

转载 作者:行者123 更新时间:2023-11-29 19:32:08 26 4
gpt4 key购买 nike

我收到了客户发来的数据库脚本,这些脚本无法更改。当我尝试使用 EntityFramework 数据库优先方法从这些脚本创建实体时,类中缺少引用关系:

CREATE TABLE agency(
tenant_sktmp INT identity(1,1) not null,
rec_create_tmstptmp DATETIME NOT NULL,
rec_update_tmstptmp DATETIME NOT NULL,
rec_created_bytmp VARCHAR(50),
rec_updated_bytmp VARCHAR(50),
env_nametmp VARCHAR(100) NOT NULL,
product_app_nametmp VARCHAR(100) NOT NULL,
tenant_idtmp VARCHAR(50) NOT NULL,
tenant_nametmp VARCHAR(100) NOT NULL
PRIMARY KEY (tenant_sktmp)
)


CREATE TABLE usertmp(
user_sktmp INT identity(1,1) not null,
rec_create_tmstptmp DATETIME NOT NULL,
rec_update_tmstptmp DATETIME NOT NULL,
rec_created_bytmp VARCHAR(50),
rec_updated_bytmp VARCHAR(50),
user_nametmp VARCHAR(100) NOT NULL,
tenant_idtmp VARCHAR(50) NOT NULL,
env_nametmp VARCHAR(100) NOT NULL,
user_pwd_hashtmp VARCHAR(255) NOT NULL,
user_first_nametmp VARCHAR(200) NOT NULL,
user_last_nametmp VARCHAR(200) NOT NULL,
user_hire_datetmp DATETIME,
user_birth_datetmp DATETIME,
user_staff_idtmp VARCHAR(50),
user_santrax_idtmp VARCHAR(50),
user_guidtmp VARCHAR(128),
PRIMARY KEY (user_sktmp)
)

CREATE UNIQUE INDEX tmp12 ON agency(tenant_idtmp, env_nametmp)
CREATE INDEX ref64tmp ON agency(env_nametmp)


CREATE UNIQUE INDEX user_key1qqq ON usertmp(user_nametmp, env_nametmp, tenant_idtmp)
CREATE INDEX ref56qq ON usertmp(tenant_idtmp, env_nametmp)
CREATE INDEX ref67qq ON usertmp(env_nametmp)

ALTER TABLE usertmp ADD CONSTRAINT Reftenant6tmp
FOREIGN KEY (tenant_idtmp, env_nametmp)
REFERENCES agency(tenant_idtmp, env_nametmp)

从 EF 数据库创建的类第一种方法如下:

public partial class usertmp
{
public int user_sktmp { get; set; }
public System.DateTime rec_create_tmstptmp { get; set; }
public System.DateTime rec_update_tmstptmp { get; set; }
public string rec_created_bytmp { get; set; }
public string rec_updated_bytmp { get; set; }
public string user_nametmp { get; set; }
public string tenant_idtmp { get; set; }
public string env_nametmp { get; set; }
public string user_pwd_hashtmp { get; set; }
public string user_first_nametmp { get; set; }
public string user_last_nametmp { get; set; }
public Nullable<System.DateTime> user_hire_datetmp { get; set; }
public Nullable<System.DateTime> user_birth_datetmp { get; set; }
public string user_staff_idtmp { get; set; }
public string user_santrax_idtmp { get; set; }
public string user_guidtmp { get; set; }
}
public partial class agency
{
public int tenant_sktmp { get; set; }
public System.DateTime rec_create_tmstptmp { get; set; }
public System.DateTime rec_update_tmstptmp { get; set; }
public string rec_created_bytmp { get; set; }
public string rec_updated_bytmp { get; set; }
public string env_nametmp { get; set; }
public string product_app_nametmp { get; set; }
public string tenant_idtmp { get; set; }
public string tenant_nametmp { get; set; }
}

我们可以看到两个类之间缺少关系。我如何确保关系仍然存在,因为我在引用代理表的 usertmp 表中有外键。

无法更改 Sql 脚本。任何帮助将不胜感激。

最佳答案

如果您无法控制架构,并且使用非关键字段进行链接,则可以通过 JOIN Statements 关联表。 。见下文。

此外,您可以使用注释将更友好的类属性映射到可读性较差的 SQL 列名称(您需要在部分类中执行此操作,以便在重新生成时它不会被清除):

public partial class usertmp
{
...
[Column("user_first_nametmp")]
public string FirstName { get; set; }
[Column("user_last_nametmp")]
public string LastName { get; set; }
[Column("user_birth_datetmp")]
public Nullable<System.DateTime> BirthDate { get; set; }
...
}

现在您可以加入:

var query =
from u in usertmp
join a in agency on u.tenant_idtmp equals a.tenant_idtmp
select new
{
FirstName = u.FirstName,
LastName = u.LastName,
BirthDate = u.BirthDate,
AgencyName = a.env_nametmp // You could map this to a friendly name as well
};

您可以将结果选择到 ViewModel 或匿名对象中,如上所述。

关于c# - 数据库第一种方法中缺少 Entity Framework 导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41724844/

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