我想使用实体框架为现有数据库实现Table Per Type继承。
数据库:
ImageParagraphs的继承工作非常完美,但由于主键不同(ParagraphID; ParagraphID + LinkID),我无法使用LinkListParagraph创建Table Per Type继承:
错误1错误3003:从第113行开始映射片段中的问题:EntitySet段落的所有键属性(Paragraphs.ParagraphID)必须映射到表LinkListParagraph的所有键属性(LinkListParagraph.LinkID,LinkListParagraph.ParagraphID) 。 C:\ Users \ buc \ Documents \ Visual Studio 2008 \ Projects \ ParagraphTest \ ParagraphTest \ ParagraphModel.edmx 114 15 ParagraphTest
是否可以在不更改数据库的情况下解决此问题?
我想做的是这样的事情:
答案 0 :(得分:1)
一种方法可能是关于主键的实体框架。这将需要进入EDMX中的商店映射并更改主键标志。但要意识到,如果执行此操作,则每次执行更新时,“从数据库更新模型”向导将尝试“修复”映射。
另一种方法是在数据库中创建一个视图并映射视图而不是表。
答案 1 :(得分:0)
主要问题来自实体框架的不必要的默认密钥创建。 尝试以xml格式打开.edmx文件,现在您将看到以下内容:
<EntityType Name="GSKItemDetails">
<Key>
<PropertyRef Name="ItemId" />
<!--<PropertyRef Name="Description" />
<PropertyRef Name="NDCNumber" />-->
</Key>
<Property Name="ItemId" Type="varchar" Nullable="false" MaxLength="47" />
<Property Name="Description" Type="varchar" Nullable="false" MaxLength="30" />
<Property Name="NDCNumber" Type="varchar" Nullable="false" MaxLength="16" />
<Property Name="UnitPrice" Type="decimal" Precision="19" Scale="4" />
</EntityType>
在我的案例中评论了不必要的PropertyRef,如上所述,解决了出错的问题:错误3003。