Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 如何最好地使用实体框架代码第一个模型类手动处理现有的数据库列映射?_C#_.net_Entity Framework_Ef Code First_Dbcontext - Fatal编程技术网

C# 如何最好地使用实体框架代码第一个模型类手动处理现有的数据库列映射?

C# 如何最好地使用实体框架代码第一个模型类手动处理现有的数据库列映射?,c#,.net,entity-framework,ef-code-first,dbcontext,C#,.net,Entity Framework,Ef Code First,Dbcontext,我正在使用现有的MSSQL数据库构建一个EF代码优先驱动的应用程序。我真的不想使用任何强大的工具或基于向导的自动代码生成实用程序来构建我的模型和dbcontext,因为我们需要完全控制代码生成 我的问题是,当我构建模型时(在我的上下文中将最终成为dbset()属性),我应该如何处理模型中现有的SQL列?是否需要为数据库中设置为“Not Nullable”的每个db列向模型类添加属性?如果我在模型中遗漏了一些与db列对应的属性,EF知道该怎么办吗?只是不确定这一切应该如何解决,我在查找资源时遇到了

我正在使用现有的MSSQL数据库构建一个EF代码优先驱动的应用程序。我真的不想使用任何强大的工具或基于向导的自动代码生成实用程序来构建我的模型和dbcontext,因为我们需要完全控制代码生成

我的问题是,当我构建模型时(在我的上下文中将最终成为dbset()属性),我应该如何处理模型中现有的SQL列?是否需要为数据库中设置为“Not Nullable”的每个db列向模型类添加属性?如果我在模型中遗漏了一些与db列对应的属性,EF知道该怎么办吗?只是不确定这一切应该如何解决,我在查找资源时遇到了一点困难,无法直接回答从CF模型到现有db字段映射的问题。是否有人拥有有助于澄清此过程的信息


任何帮助都将不胜感激,谢谢

使用混合方法,从数据优先模型开始,然后使用代码优先方法添加新实体


如果实体与其映射到的数据库实体不匹配,EF将抛出异常。

这是我迄今为止使用EF的唯一方法,并且没有出现任何问题。如果对象上的属性为null,EF将向DB写入null值。此外,您的所有列不需要在实体中表示(尽管显然所有必需的列都需要在实体中表示,或者如果您想进行插入,则在DB级别具有默认值)。我认为很难找到关于这类问题的信息的原因是这是ORM所做的,而且做得很好。我建议您尝试创建和使用您的第一个实体,看看您遇到了什么问题。从您现在的立场来看,这可能比看起来容易得多。

谢谢您的回复。因此,EF模型类将需要每个列的直接属性到db列映射,而不管其可为null的状态如何?是的,可为null的状态必须匹配,如果列不允许为null,则您的实体不能允许为null。好的,明白了。在这种情况下,似乎最好生成一个edmx模型,以节省时间。。db有很多大的表,在这种情况下,为每一列编写属性需要很长的时间。您会推荐EF Datamodel edmx还是其他更好的方法,比如DBContext Generator 5?当然是DBContext Generator。太好了,谢谢。我将使用Entity Datamodel生成实体,然后在CF中从那里开始工作。似乎这是EF针对现有db.Columns的安全路由,这些db.Columns不可为null,并抛出异常。此外,在EF之外对db结构所做的任何更改都不会传播。除非db首先是纯代码,否则最好先生成模型。我在一个一次性转换应用程序中映射了一个对象,在该应用程序中,我没有为不可为空的列定义属性,并且能够加载对象,除非我在该项目的db设置中出错。如果你确定我错了,我就得去把它挖出来,试着弄清楚我的误解是什么。。。Maess,通过从VS生成实体数据模型,我会打破纯CF方法吗?很抱歉,如果我的问题是noob,我仍在尝试获取此问题的句柄。@Maess我刚刚在项目中的现有DB表中添加了一个新的非空列,并为其提供了一个默认值。仍然能够加载和使用此对象,而不会对我的实体等进行任何代码更改。我建议使用EF Power Tools将现有数据库反向工程到POCO类中,如果只是为了学习如何自己手动编写它们的一些技巧/窍门的话。通过对我们的一个生产数据库进行反向工程,我能够很好地掌握如何使用fluentapi。此外,有几种方法可以实现您想要做的事情。我喜欢fluentapi,因为我认为它最终更加干净/易于维护(您的模型和它的实现细节是分开的)。许多其他人喜欢数据注释,因为它们更容易获取/使用,并且没有与模型分离。