我有一个别人设计的可怕的数据库模型(在MySQL中,尽管我认为这并不重要),所以我坚持使用它,但是无论如何都想与Entity Framework一起使用:
物品
ASSET_ID* ASSET_NAME FIELDS_ID
1 Cat 1
2 Dog 2
3 Fish 3
ItemFields
ID* CUSTOMFIELD1ID CUSTOMFIELD2ID CUSTOMFIELD3ID
1 1001 1002 1003
2 1004 1005 1006
3 1007 1008 1009
场地
ID* STRINGVAL
1001 Meow Mix
1002 House
1003 5lbs
1004 Kibble
1005 Yard
1006 30lbs
1007 Fish Food
1008 Tank
1009 0.5 ounces
*表示表的PK
最终,我试图配置这些关系,以便我可以像这样获得自定义数据:
Item item = GetItem(1);
item.Food.ToString(); // Output: meow mix
item.Place.ToString(); // Output: house
item.Weight.ToString(); // Output: 5 lbs
...等等。但老实说,我现在已经满足了:
Item item = GetItem(1);
Item.ItemFields.CustomField3.Value // Output: 5 lbs
Item item = GetItem(2);
Item.ItemFields.CustomField2.Value // Output: Yard
Item item = GetItem(3);
Item.ItemFields.CustomField1.Value // Output: Fish Food
到目前为止,我已经知道了:
一对一:项目-ItemFields
modelBuilder.Entity<Item>()
.HasRequired(x => x.ItemFields)
.WithRequiredPrincipal(y => y.Item);
但是,如何将ItemFields.CustomField1ID映射到Field.ID?
甚至有可能首先使用EF代码配置这样的关系?对于这是一对一还是一对多,我感到很困惑。我认为实际上是许多一对一的关系(如果这很有意义)。
有什么建议?
我可能已经知道了。我编辑了ItemFields类,使其看起来像这样:
public class ItemFields
{
public int Id { get; set; }
public int CUSTOMFIELD1ID { get; set; }
public virtual Field CustomField1 { get; set; }
然后配置这些关系:
modelBuilder.Entity<Item>()
.HasRequired(x => x.CustomField1)
.WithMany()
.HasForeignKey(x => x.CUSTOMFIELD01_ID);
modelBuilder.Entity<Item>()
.HasRequired(x => x.CustomField2)
.WithMany()
.HasForeignKey(x => x.CUSTOMFIELD02_ID);
它似乎奏效了,尽管说实话我不完全理解为什么。理想情况下,我仍然希望将它们映射到更用户友好的类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句