我有一个MS SQL 2008数据库,我无法更改其架构。我必须处理它是什么。 它有三个与问题相关的表格。
产品表。列是:
合约表。列是:
折扣表。列是:
这个想法是折扣可以应用于四个中的任何一个。我想重申一下,这是我无法改变的数据库设计。
使用Entity Framework我可以使用连接查询表,但我不能使用开箱即用的导航属性,因为导航属性是基于数据库中的外键关系生成的,并且您无法定义“条件” MS SQL中的关系,当字段类型包含此值时,字段对象与一个表相关,当值不同时,字段对象与另一个表相关。
我的问题是:是否可以使用Entity Framework定义类和映射,以便在此方案中使用导航属性?例如,我做了Discount.Object,我收到了Contract对象或Product对象作为响应,如果这是一个Product对象,则会在右侧属性中检索它。
这是可能的,或类似的东西,或加入是我能做的最好的事情吗?
答案 0 :(得分:1)
您说“这是我无法更改的数据库设计”,但是如果不更改现有表,您至少可以添加视图吗?
如果可以,您可以为Discount表创建一个视图,该视图为每个关系提供四个不同的可为空的列。这将很好地映射到EF作为四个导航属性。
执行此操作后,如果您仍需要组合列,则可以将自己的属性添加到Discount实体,该实体将通过检查四个导航属性中的哪一个不为null来返回object
,并返回链接实体。
答案 1 :(得分:0)
您无法像这样创建关系数据库。每个潜在父行的密钥都需要单独的列。