我在现有数据库中有2个表:
Table1
[Key] public int Id {get; set;}
public int CustomerID {get; set;}
List<Table2> Table2Items {get; set;}
....
Table2
[Key] public int Id {get; set;}
public int customerid {get; set;}
Table1 Table1Item {get; set;}
...
我想创建一对多关系,这样table1中的每条记录都可以在table2中包含许多相关记录。
它通常使用table1中的主键字段直接转发,该字段与表2中的外键字段(customerid)匹配。
但是我希望将基于table1中的CustomerID的2个表与table2中的customerid相关联。
以下似乎通过将table2中的customerid字段与table1中的主键一起使用来关联2个表,这不是我需要的。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Table1>()
.HasMany<Table2>(s => s.Table2Items)
.WithRequired(s => s.Table1Item)
.HasForeignKey(s => s.customerid);
}
如何修改上面显示的代码以符合我的要求。
答案 0 :(得分:0)
当前版本的Entity Framework无法实现您想要实现的目标。引自https://stackoverflow.com/a/7022799/337294:
这是不可能的。 EF中的关系遵循与数据库中完全相同的规则。这意味着主表必须具有唯一标识符,该标识符由依赖表引用。在数据库的情况下,标识符可以是主表的主键或唯一列。否则它是无效的关系。
由于Entity Framework尚不支持唯一索引(尽管Feature Suggestion page中有强烈需求),因此它必须是Id
类的Table1
属性。