gpt4 book ai didi

c# - Entity Framework 一对多默认

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:15 24 4
gpt4 key购买 nike

我正在尝试在 Entity Framework 中建立一对多关系,其中可以选择将许多项目之一指定为默认值。

public class SomeEntity
{
public int Id { get; set; }
public Item DefaultItem { get; set; } // Optional
public ICollection<Item> Items { get; set; }
}

public class Item
{
public int Id { get; set; }
public string ItemName { get; set; }
public SomeEntity SomeEntity { get; set; }
}

在 Fluent API 中一对多的配置看起来非常简单:

HasMany(e => e.Items).WithRequired(i => i.SomeEntity).WillCascadeOnDelete(true);

但实现默认项目的解决方案已被证明是难以捉摸的。我尝试了这个(以及各种变体)但没有成功。它告诉我“指定的架构无效”。

HasOptional(e => e.DefaultItem).WithRequired(i => i.SomeEntity);

有什么想法吗?提前致谢。

最佳答案

这是一个有点不典型的“设置”(它通常是通过项目上的一些“标志”来指定的——但我可能认为需要类似的东西),并将一个项目与同一个父项关联两次。

但是,这应该可行...

modelBuilder.Entity<SomeEntity>()
.HasOptional(x => x.DefaultItem)
.WithOptionalPrincipal() // x => x.DefaultForEntity)
.WillCascadeOnDelete(false);
...
// public SomeEntity DefaultForEntity { get; set; } // optional

...并像这样使用它:

var item = new Item { ItemName = "Default1", };
db.SomeEntities.Add(new SomeEntity { DefaultItem = item, Items = new[]
{
item,
new Item{ ItemName = "Item1", },
new Item{ ItemName = "Item2", },
new Item{ ItemName = "Item3", },
new Item{ ItemName = "Item4", },
}
});
db.SaveChanges();

关于c# - Entity Framework 一对多默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751798/

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