1

我想知道我正在尝试做的事情是否可以使用 Entity Framework (5)。简单来说,我有 2 节课

public class Value
{
  public int Id {get; set;}
  public int Content {get; set;}
  public virtual ICollection<Constraint> Constraints {get; set;}
}

public class Constraint
{
  public int Id {get; set;}
  public string Name {get; set;}
  public string Type {get; set;}
}

在我的业务逻辑中,如果这对(名称,类型)相似,我会考虑两个相似的约束。在代码中的某处,我将约束与值相关联,例如:

Value v1 = new Value() { Content = 42 };
Constraint c1 = new Constraint() {Name = "A", Type = "B" };
v1.Constraints.Add(c1);

Value v2 = new Value() { Content = 43 };
Constraint c2 = new Constraint() {Name = "A", Type = "B" };
v2.Constraints.Add(c2);

然后,我有负责在数据库中插入值的持久层的另一部分:

ValueRepository.Insert(v1);
ValueRepository.Insert(v2);

对夫妇(名称,类型)的“约束”表具有唯一约束,我想避免在插入 c2 时出现插入错误。我如何告诉 EF 将 c2 视为与 c1 相同?

PS:我不能使用约束存储库来实例化约束实体。

4

1 回答 1

1

EF 无法为您执行此操作,因为它建立在实体不是可交换价值的假设之上。实体实例映射到行。每个不同的实例都是独立的。

因此,您需要确保不要重复插入。按优先顺序排列的技术:

  1. 更改应用程序的逻辑以不生成重复项
  2. 在创建实体实例之前,测试数据库是否已经存在(IOW 运行查询)
  3. 处理异常。

不要使用 (3),因为很难处理这个错误。很可能你也会吞下不相关的东西。例如,您可能会将网络错误误认为实体已经存在。

于 2013-07-29T13:11:39.357 回答