【发布时间】:2016-08-02 09:54:51
【问题描述】:
我有两张表,其中一张与另一张相关。 第一张表
public class Text
{
[Key]
[Column(Order = 1)]
[Required]
[MinLength(7)]
[MaxLength(7)]
public string Fieldname { get; set; }
[Key]
[Column(Order = 2)]
[Required]
public virtual Language Language { get; set; }
[MaxLength(50)]
[MinLength(1)]
[Required]
public string Description { get; set; }
}
还有第二张桌子:
public class Language
{
[Key]
[Required]
[MaxLength(2), MinLength(2)]
public string Code { get; set; }
[Required]
public string Country { get; set; }
}
种子数据如下:
context.Language.AddOrUpdate(
new Language() {Code = "DE", Country = "German"},
new Language() {Code = "EN", Country = "English"});
context.Text.AddOrUpdate(
new Text { Fieldname = "TEXT001", Description = "Server", Language = context.Language.First(e => e.Code == "EN") },
new Text { Fieldname = "TEXT001", Description = "Server", Language = context.Language.First(e => e.Code == "DE") }
);
我更新数据库并收到以下错误消息:
System.Data.Entity.Core.UpdateException:更新条目时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException:违反主键约束“PK_dbo.Texts”。无法在对象“dbo.Texts”中插入重复键。重复键值为 (TEXT001)。
怎么了?
【问题讨论】:
-
是的,但与字段
Fieldname和Language结合使用。请看种子数据,然后你应该是我的意思。 -
@zero_coding - 不确定,但我认为您应该指定
Languagekey是外键 -[Key, ForeignKey("Language"), Column(Order=2)] -
将复杂属性
Language设置为密钥有效吗?
标签: c# entity-framework