我有一个没有任何FK的数据库中的实体模型,在我的模型中,我想在表示关联的列之间添加一个关联。有没有办法在不必在DataBase上创建FK的情况下做到这一点? (我没有任何权限在数据库上创建FK。)
示例:
TableA
- id (PK)
- idB
- someParam
TableB
- idB (PK)
- someParam2
- someParam3
答案 0 :(得分:0)
只需在实体框架中手动定义FK,在数据库中没有真正的外键我可以想象如果数据库很大,查询将会非常慢。 映射可以是这样的:
public class A
{
[Key]
[Required]
public int id {get; set;}
[ForeignKey("tableB")]
public int idB {get; set;}
public virtual TableB tableB {get; set;}
}
或者您可以使用流畅的映射(在我看来更好):
modelBuilder.Entity<TableB>()
.HasRequired(e => e.TableA)
.WithOptional(e => e.TableB)
.HasForeignKey(e => e.idB);
这只是一个例子,因为我不知道tableA和tableB之间的具体关系(一对一可选,一对多...)
我可以通过这种方法看到的另一个问题是插入/删除/更新实体。因为没有真正的外键存在,所以在调用SaveChanges()
时,您必须注意不要在tableB中插入重复记录。
一篇关于它的好文章:https://msdn.microsoft.com/en-us/magazine/hh708747.aspx