每个类型 Entity Framework 4.0 模型都有一个简单的表:-

  • 所有类都是 POCO。
  • Post 类是 abstract
  • DiscussionListconcretes 类,它们继承自 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/

    10-13 00:40