Bil*_*eer 8 c# entity-framework-5
我想在应用程序中跟踪各种对象.对象是计算机,照相机,交换机,路由器等.我希望各种对象从一个名为Device的对象继承,因为它们都有一些共同的属性(即IP地址,MAC地址等)我喜欢创建对象使用设计器(Model First),但我不喜欢从模型更新数据库的困难.基本上,我不喜欢删除数据库并重新创建它,特别是在我开始填充数据库之后.我尝试的另一种方法是在SQL Server中使用SSMS创建数据库,但是当我从数据库创建POCO时,实体不会相互继承.对我的情况有什么好处?
And*_*own 11
我希望各种对象从一个名为Device的对象继承,因为它们都有一些共同的属性(即IP地址,MAC地址等)
您基本上是在讨论要在EF中使用哪种继承模式; 或模型如何映射到数据库表.EF中有3种主要类型的继承模式(请参阅继承映射:初学者演练指南):
每个都有利弊(如表现).但是,您还应该考虑此模型是与数据库相关的模型,然后在较大的项目中,您可以创建第二层以用于业务逻辑.DDD讨论了持久性模型和领域模型.同样,您在此处的选择正在权衡开发的初始速度以及稍后的可扩展性和性能.
我喜欢使用设计器(Model First)创建对象,但我不喜欢从模型更新数据库的困难.
EF有4种且只有4种开发策略(参见实体框架开发工作流程):
我不喜欢删除数据库并重新创建它,特别是在我开始填充数据库之后
Code First非常非常擅长:
不幸的是,使用Model First执行此操作会更加困难.我所知道的唯一真正的解决方案是生成一个新数据库,并使用SQL比较(带数据比较)工具在新数据库中生成数据.
选择模式和策略
每种策略都有利有弊,每种继承模式都可以更好地用于特定的开发策略.权衡取舍实际上是您自己的判断,例如,如果您拥有继承的现有数据库,则可能必须首先使用数据库,或者您可能更乐意使用EF设计器,因此将使用模型优先.
Model First(我的意思是使用EF设计器来定义您的模型)默认使用TPT策略.请参阅EF Designer TPT继承.如果你想要TPH,那么你可以使用Model-first(参见EF Designer TPH继承),但你还有额外的工作要做; Code First更适合TPH.TPC使用Model First更加困难,而Code First在EF 5中确实是最好的(唯一可行的)选择.
当我从数据库创建POCO时,实体不会相互继承
记住模型处理类是很好的; 数据库处理表中的存储.从数据库生成模型时,EF很难确定TPH或TPC继承应该是什么.它所能做的就是根据表格关联在你的模型上创建一个"最佳猜测".在通过重命名属性,更改关联或应用继承来生成模型之后,您必须帮助它.真的没有其他方法可以做到这一点.因此,对数据库的更新也可能需要对模型进行更多的工作.
你最好的方法
不幸的是,这归结为意见.但是,如果您的主要要求是:
那么这些技术要求的最佳匹配是Code First开发,具有迁移和播种.
Code First的缺点是必须编写自己的POCO,并学习数据注释属性.但是,请记住: