为什么此实体框架代码不保存到数据库?

时间:2010-09-23 02:38:04

标签: .net sql-server entity-framework sql-server-2008 entity-framework-4

我们有一个简单的 Table per Type Entity Framework 4.0模型: -

alt text

  • ALl课程都是POCO。
  • 发布课程为abstract
  • DiscussionList类是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]。[讨论] ??我们怎么解决这个问题呢?

UPDATE:

此外,这是我们设计师属性的另一个屏幕截图..所以你可以看到我们想到它应该调用[dbo],因为那是默认的Database Scheme Name

alt text

并在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文件...这很好..但感觉......错了?

干杯:)

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,确保子表设置了主键,解决了问题。

即使子表具有父表的FK,您仍然需要将这些字段设置为PK,否则EF不知道如何在子表上执行INSERT。

因此,在您的示例中,尝试将 PostId 设置为讨论表中的主键,然后刷新您的模型。

放手一搏。