我有一个可怕的数据库模型(在 MySQL 中,尽管我认为这并不重要),是其他人设计的,所以我坚持使用它,但无论如何想与实体框架一起使用:
Database
Item
ASSET_ID* ASSET_NAME FIELDS_ID
1 Cat 1
2 Dog 2
3 Fish 3
项目字段
ID* CUSTOMFIELD1ID CUSTOMFIELD2ID CUSTOMFIELD3ID
1 1001 1002 1003
2 1004 1005 1006
3 1007 1008 1009
Field
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
Goal
最终,我尝试配置关系,以便可以获得如下自定义数据:
Item item = GetItem(1);
item.Food.ToString(); // Output: meow mix
item.Place.ToString(); // Output: house
item.Weight.ToString(); // Output: 5 lbs
...ETC。但老实说,我现在就解决这个问题:
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 代码配置这样的关系?我很困惑这是一对一还是一对多......我认为它实际上是许多一对一(如果这有意义的话)。
有什么建议么?