我们有一个简单的 Table per Type Entity Framework 4.0模型: -
abstract
。Discussion
和List
类是concretes
,继承自帖子(如图所示)。当我们尝试保存Discussion
时,我们会执行以下代码: -
Posts.AddObject(discussion);
Sql Server语法分为两部分。第二个错误。注意sql架构命名空间?这是为什么? (代码取自EFProf)
insert [dbo].[Posts]
([Subject],
[UniqueSubject],
[Content],
[CreatedOn],
[ModifiedOn],
[IsVisible],
[UserId])
values('Test Subject' /* @0 */,
'sdfsdfsdfsdfsfdssd' /* @1 */,
'this is a lot of content - pew pew pew' /* @2 */,
'23/09/2010 12:22:08 PM +10:00' /* @3 */,
'23/09/2010 12:22:08 PM +10:00' /* @4 */,
1 /* @5 */,
1 /* @6 */)
select [PostId]
from [dbo].[Posts]
where @@ROWCOUNT > 0
and [PostId] = scope_identity()
insert [XWingModelStoreContainer].[Discussions]
([PostId])
values(20132 /* @0 */)
注意表名是[XWingModelStoreContainer]。[讨论] ??不应该是[dbo]。[讨论] ??我们怎么解决这个问题呢?
此外,这是我们设计师属性的另一个屏幕截图..所以你可以看到我们想到它应该调用[dbo],因为那是默认的Database Scheme Name
。
并在Xml edmx
文件中..有两个名字的行..
<edmx:StorageModels>
<Schema Namespace="XWingModel.Store" Alias="Self"
Provider="System.Data.SqlClient" ProviderManifestToken="2008"
xmlns:store="http://schemas.microsoft.com.. snip ..."
xmlns="http://schemas.microsoft.com/ ..snip ..">
<EntityContainer Name="XWingModelStoreContainer">
.....
和..
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping xmlns="http://schemas.microsoft.c.. snip .." Space="C-S">
<Alias Key="Model" Value="XWingModel" />
<Alias Key="Target" Value="XWingModel.Store" />
<EntityContainerMapping CdmEntityContainer="XWingEntities"
StorageEntityContainer="XWingModelStoreContainer">
.......
这也有帮助吗?我不知道这些名字是如何到达那里的(我假设是自动生成的)我怎么需要改变它们?如果是这样,它看起来只能通过xml文件...这很好..但感觉......错了?
干杯:)
答案 0 :(得分:1)
我遇到了类似的问题,确保子表设置了主键,解决了问题。
即使子表具有父表的FK,您仍然需要将这些字段设置为PK,否则EF不知道如何在子表上执行INSERT。
因此,在您的示例中,尝试将 PostId 设置为讨论表中的主键,然后刷新您的模型。
放手一搏。