Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF核心-在DB优先方法中不需要属性_C#_Entity Framework_.net Core_Ef Database First_Ef Core 2.1 - Fatal编程技术网

C# EF核心-在DB优先方法中不需要属性

C# EF核心-在DB优先方法中不需要属性,c#,entity-framework,.net-core,ef-database-first,ef-core-2.1,C#,Entity Framework,.net Core,Ef Database First,Ef Core 2.1,如果客户端使用EFCore DB first方法连接到数据库,但永远不会进行任何迁移(仅进行简单的CRUD操作),TypeName(在`Column属性中)参数是否必要 如果未提供TypeName,则客户端应使用类中声明的类型,db应使用创建表时声明的类型。如果客户端永远不会执行任何迁移,那么忽略该属性而完全不指定它是正确的吗?虽然“Column”属性是必须的,因为db中的列名并不总是与C#entity中的列名相同,但类型不是必需的。对吗 我的第二个问题是,对于不进行迁移就连接到现有数据库的应用

如果客户端使用EFCore DB first方法连接到数据库,但永远不会进行任何迁移(仅进行简单的CRUD操作),
TypeName
(在`Column属性中)参数是否必要

如果未提供
TypeName
,则客户端应使用类中声明的类型,db应使用创建表时声明的类型。如果客户端永远不会执行任何迁移,那么忽略该属性而完全不指定它是正确的吗?虽然“Column”属性是必须的,因为db中的列名并不总是与C#entity中的列名相同,但类型不是必需的。对吗

我的第二个问题是,对于不进行迁移就连接到现有数据库的应用程序,是否有任何指导原则?在db first/no migrations方法中根本不需要的属性列表

编辑:

我不确定是否需要(在fluent API中也是如此)的其他属性包括:


我想从现有数据库生成模型和DbContext,但不需要迁移所需的东西。我只需要对数据库进行读写操作,因此我假设只有专有名称、类型和关系。。我想,我不确定

各种属性不仅用于迁移,还可以帮助EF确定在操作期间如何组合/转换值。枚举就是一个例子。它们可以存储为整数或字符串。类似于
hasdaultvaluesql(((getdate()))”。Db First的列类型将根据其时间进行默认设置。如果您首先使用代码,您将希望告诉EF字符串列应该有多大,以及它应该存储Unicode还是ASCII,但对于Db First,它只关心这两种数据类型是否兼容。(C#对象和数据库)

也就是说,实体上的大多数属性不需要任何属性。EF可以推断它们并确保它们是兼容的。我在实体中经常使用的唯一属性是属性名(我希望实体中有更具描述性的名称),以及属性类型(我需要显式转换的少数情况)。对于PKs,您需要为标识(或默认)列利用DatabaseGenerateOption。我使用
[TableName]
时,我的表可能不符合EF的默认命名约定要求。基本上,我默认不添加任何显式的列配置(PK和导航属性除外),然后只添加所需的内容。我见过一些首先使用Db的项目,其中每个实体中的每个属性都被映射出来。在我看来,这可能是彻底的,但有点过分


属性或配置不会有任何影响。关于确保EF不执行迁移或尝试初始化DB的唯一需要担心的事情。对于EF6,您必须通过
数据库.SetInitializer(null)
显式地关闭它;至少对于EF Core,您不需要担心它,因为您必须显式地调用它

正如Steve根据您的第一次困惑所解释的
关于你的第二个问题 您可以使用ef-db脚手架

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

哇,你的最后一段让我有点震惊。我根本没想过。我甚至不想触及数据库的结构。我可以显式阻止迁移吗?除了确保团队中的每个人都知道不使用迁移,并使用定期的代码检查之外,我不知道有什么方法可以阻止迁移。如果您使用的是自动构建/单元测试以及类似于NISTION或类似的约定/健康检查,您可能会考虑自定义规则来查找调用“代码>数据库。迁移”(<)/代码>或<代码>数据库。
Scaffold-DbContext "Your Connection String" Microsoft.EntityFrameworkCore.SqlServer -OutputDir YourModelFolder