每个类型 Entity Framework 4.0 模型都有一个简单的表:-
abstract
。 Discussion
和 List
是 concretes
类,它们继承自 Posts(如图所示)。 当我们尝试保存
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].[Discussions] ??那不应该是 [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 文件..这很好..但感觉......错了?干杯:)
最佳答案
我遇到了类似的问题,问题通过 解决,确保子表具有主键集 。
即使子表对父表有FK,你仍然需要将这些字段设置为PK,否则EF不知道如何对子表执行INSERT。
因此,在您的示例中,尝试将 PostId 设置为 Discussion 表上的主键,然后刷新您的模型。
试一试吧。
关于.net - 为什么这个 Entity Framework 代码没有保存到数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3775073/