具有附加Id的EF联结表在保存时抛出异常

时间:2016-10-21 08:43:29

标签: c# entity-framework

此问题与我的Original Question相关。

我得到它的工作很好,但几秒钟之前,我注意到它不是我预期的100%。

public class EntryHardware{
    [Key]
    [Column(Order=0)]
    public int Id {get; set;}
    [Key]
    [Column(Order=1)]
    public int EntryId {get; set;}
    [Key]
    [Column(Order=2)]
    public int HardwareId {get; set;}
    public AdditionalProperty Foo {get; set;}
    public virtual Entry ...
    public virtual Hardware ...
}

使用此方法,条目可以包含n 不同的硬件,但添加相同的硬件两次将导致不唯一的Id-Set。

为了解决这个问题,我在EntryHardware模型中添加了一个新的唯一属性:

public class EntryHardware{
    [Key]
    [Column(Order=0)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id {get; set;}
    [Key]
    [Column(Order=1)]
    public int EntryId {get; set;}
    [Key]
    [Column(Order=2)]
    public int HardwareId {get; set;}
    public AdditionalProperty Foo {get; set;}
    public virtual Entry ...
    public virtual Hardware ...
}

不幸的是,Id Property不会通过DB自动设置。寻找答案我找到了一个应该解决这个问题的属性:

//This one gets the image from the first product in the product category category:

$catimg = get_the_post_thumbnail( $product->id, 'thumbnail' );

//This code contains custom text that also reads info from various variables, including the `$catimg` variable:

$cat_art1 =  '<h1>'.$variable1.' This is some text that will be outputted to my site.</h1>
Here i want to screen the image <img src="' . $catimg . '" alt="alt">
Some more text and another '.$variable.' to end the line';

但是使用这个我的代码在将实体保存到数据库时会抛出异常:

  

存储更新,插入或删除语句会影响意外的行数(0)。自实体加载以来,实体可能已被修改或删除。

但我无法弄清问题在哪里......

1 个答案:

答案 0 :(得分:1)

[通过评论推广]

停下来退后一步......你想要实现什么目标?

为什么不给连接表提供自己的(无意义的)ID,使硬件/条目ID为外键并在一天内调用它?

请记住,仅在用于标识该特定表中的记录的字段(表的主键)上才需要Key属性。在多个字段上使用该属性可创建一个复合键(这是您的唯一约束来源)。