在Entity Framework域之间创建引用

时间:2016-07-10 02:11:52

标签: c# entity-framework

我有一个名为Item的域名和一个名为Category的域名。我想将类别的PK添加到Item,但我不确定如何在EF 6中执行此操作

public class Item
{
    [Key]
    public Guid Id { get; set; } = GuidCombGenerator.GenerateComb();
    public string Name { get; set; }
    public Category Category { get; set; }
}

public class Category
{
    [Key]
    public Guid Id { get; set; } = GuidCombGenerator.GenerateComb();
    public string Name { get; set; }
    public virtual ICollection<Item> Items { get; set; } = new List<Item>();
}

我以为我能做到这一点

var item = new Item
                {
                    CategoryId =  dto.CategoryId ,
                    Name = dto.Name.Trim(),
                };

dbContext.StorageItems.Add(item);
dbContext.SaveChanges();

我添加了另一个名为CategoryId的属性,并使用正确的Id填充此属性。然而,这会产生一个新的Category条目而不是仅仅链接2。

我认为我可以做到这一点,但也许我正在将它与NHibernate混合在一起。

然后我尝试了这个(不认为这会起作用):

var item = new item
                {
                    Category = new Category { Id = dto.CategoryId, },
                    Name = dto.Name.Trim(),
                };

dbContext.StorageItems.Add(item);
dbContext.SaveChanges();

根本不喜欢这个。

我能想到的唯一选择是转到数据库并获取Category对象然后将其添加到Item但我想阻止前往数据库只是为了获取我已经知道的id

1 个答案:

答案 0 :(得分:0)

标记您的Category虚拟广告,创建CategoryId媒体资源,然后将其指定为Category的外键。

public class Item
{
    [Key]
    public Guid Id { get; set; };
    public string Name { get; set; }
    public Guid CategoryId { get; set; }
    [ForeignKey("CategoryId")]
    public virtual Category Category { get; set; }
}

有了这个,你的第一个代码(直接分配Id)应该有效,除非你&#34;触摸&#34; Category属性或引用。

为此,请确保您未在​​上下文中禁用代理

此外,请确保您不要将Id属性设置为自定义,让EF完成其工作