我有VS 2012和现有数据库(sql 2012)。
在数据库中,存在一对一关系,某些列不可为空,默认值为“”。 EDM生成了edmx图,但所有关系都是一对多。
我的Customer
表格列为AddressReference1
,因为不可为空,其默认值为“”。在生成实体类Customer之后,我在.edmx设计器中删除了这个属性,然后我编译了项目。
如果我从设计器中删除默认值为“”的非可空属性之一,则在编译项目时会生成如下错误。
错误1错误3023:从行开始映射片段时出现问题 568:表Customer中的Customer.AddressReference1列必须是 mapped:它没有默认值,也不可为空。 C:\ Users \ cliu \ Documents \ Visual Studio 2012 \ Projects \ FulfillmentService \ ShipmentModel.edmx 569 15 FulfillmentService
如果我想从实体类中删除一些属性,如何解决此问题?
答案 0 :(得分:0)
如果要从模型中删除某些属性,则应将其删除到数据库中。否则,EF约定无法正确完成其工作。
通常,当您想要完全控制模型及其映射时,应使用Code-First方法。
数据库 - 第一种方法在很大程度上依赖于EF约定,这些约定规定了开发人员因其抽象而受到的一些限制 - 约定!。
尽管可以将db-first方法更改为代码优先并通过覆盖OnModelCreating
事件来删除其中一些约定,但是这会导致一些奇怪的问题,这些问题会导致您只需要修复两次他们...!
在您目前的情况下,您别无选择,只能接受一对多关系并保持模型与数据库同步。