EF Core-DB First方法中不需要的属性

时间:2019-09-16 19:58:10

标签: c# entity-framework .net-core ef-database-first ef-core-2.1

如果客户端使用EFCore DB-first方法连接到数据库,但是甚至没有必要进行<img src="file.svg"/>(在“列属性”中)参数(仅在简单的CRUD操作中进行迁移)吗?

如果未提供TypeName,则客户端应使用在类中声明的类型,而db应使用在创建表时声明的类型。如果客户端永远不会执行任何迁移,那么忽略该属性而不指定任何属性是正确的做法吗?尽管“列”属性是必须的,但由于db中的列名并不总是与C#实体中的列名相同,但是“类型”不是必需的。正确吗?

我的第二个问题是,有没有关于无需迁移即可连接到现有数据库的应用程序的准则?在使用db-first / no-migrations方法时根本不需要的属性列表吗?

编辑:

我不确定(在流畅的API中也是)不确定的其他属性是

TypeName

我想从现有的数据库中生成我的Models和DbContext,但没有 所需的迁移内容。我只需要读取和写入数据库,因此我只能假设专有名称,类型和关系。。我想,我不确定。

2 个答案:

答案 0 :(得分:1)

各种属性不仅用于迁移,还可以帮助EF确定操作期间如何组合/投射值。一个例子就是枚举。它们可以存储为整数或字符串。如果数据库已默认设置,则不需要SELECT * from mytable where my_id in ('${hiveconf:myargs}');之类的东西。 Db First的列类型将根据其时间默认设置。如果您使用的是Code-First,您将要告诉EF字符串列应该有多大,以及它应该存储Unicode还是ASCII,但是对于Db First,它只是关心两种数据类型是否兼容。 (C#对象和数据库)

也就是说,实体上的大多数属性不需要任何属性。 EF可以推断出它们并确保它们兼容。我在实体中经常使用的唯一属性是“属性名称”,以用于需要在实体中使用更具描述性的名称的情况下,以及在少数情况下需要显式转换的属性类型。对于PK,您将需要利用DatabaseGeneratedOption作为Identity(或默认值)列。我使用HasDefaultValueSql("(getdate())");,其中我的表可能不符合EF的默认命名约定期望。基本上,我默认不添加任何显式列配置(除了PK和导航属性以外),然后仅添加所需的内容。我看过一些使用Db First的项目,其中每个实体中的每个属性都被映射出来。 IMO可能很彻底,但是有点过分。

属性或配置不会受到影响。唯一需要担心的是,确保EF不执行迁移或尝试初始化数据库。使用EF6,您必须通过[TableName]明确将其关闭;至少对于EF Core,您不必担心,因为您必须显式调用它。

答案 1 :(得分:0)

正如史蒂夫根据您的第一次困惑所解释的那样
你的第二个问题 您可以使用ef cores数据库脚手架

Scaffold-DbContext "Your Connection String" Microsoft.EntityFrameworkCore.SqlServer -OutputDir YourModelFolder