gpt4 book ai didi

entity-framework - Entity Framework 中的单例数据库模式

转载 作者:行者123 更新时间:2023-12-04 07:06:51 27 4
gpt4 key购买 nike

我有一个应用程序,我正在数据库中实现单例模式,但遇到了大问题。

我有下表,SingletonTable

+-------------+-------+------------+
| Column Name | Type | Allow Null |
+-------------+-------+------------+
| Id | Int | No |
| VarType | Int | No |
| TypeARef | Int | Yes |
| TypeBRef | Int | Yes |
+-------------+-------+------------+

在 EF 中,这被分解为两种具体类型,TypeA 和 TypeB。 TypeARef 在 TypeA 上,TypeBRef 在 TypeB 上,VarType 是鉴别器。 (VariableType, TypeARef, TypeBRef) 上有一个唯一索引。单例模式的想法是,对于给定的值元组,我们在数据库中只有 1 行,所以每当我们添加对 SingletonTable 的引用时,我们首先检查该行是否存在,如果存在,我们返回行,如果没有,我们创建该行并返回对新创建的行的引用。我已经把它抽象成一个方法,GetSingleton。

问题是每当我使用 GetSingleton 方法时,都会出现以下异常:

测试方法 UnitTests.CreateBasicData.CreateFTIData 抛出异常:System.InvalidOperationException:无法将对象添加到 EntityCollection 或 EntityReference。无法将附加到 ObjectContext 的对象添加到与源对象无关的 EntityCollection 或 EntityReference

我正在使用它
var newRow = new SomeType
{
singletonValue = GetSingleton(new TypeB{ TypeBRef = Foo })
}

问题似乎是我无法将数据上下文中尚未存在的内容的引用添加到数据上下文中的内容。这是正确的吗?如何解决此限制?

谢谢,
罗伊

最佳答案

当在 Entity Framework 的对象上下文中执行查询时,返回的对象会自动附加到对象上下文。

您还可以将对象附加到从查询以外的源获取的对象上下文。您可能会附加先前已分离的对象、已由 NoTracking 查询返回的对象或已在对象上下文之外获取的对象。您还可以附加已存储在 ASP.NET 应用程序的 View 状态中或已从远程方法调用或 Web 服务返回的对象。

使用以下方法之一将对象附加到对象上下文:

  • 在 ObjectContext 上调用 AddObject 将对象添加到对象
    语境。当对象是一个尚未创建的新对象时执行此操作
    存在于数据源中。
  • 在 ObjectContext 上调用 Attach 将对象附加到对象
    语境。当对象已存在于数据源中时执行此操作
    但目前没有附加到上下文。想要查询更多的信息,
    请参见如何:附加相关对象( Entity Framework )。
  • 在 ObjectContext 上调用 AttachTo 将对象附加到特定的
    在对象上下文中设置的实体。如果对象有一个
    null(在 Visual Basic 中为空)EntityKey 值。

  • http://msdn.microsoft.com/en-us/library/bb896271.aspx

    关于entity-framework - Entity Framework 中的单例数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1004466/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com