[英]Entity Framework Core Migrationbuilder not setting nullable property on foreign key
[英]Entity Framework: Setting a Foreign Key Property
我们有一个看起来像这样的表:
CREATE TABLE Lockers
{
UserID int NOT NULL PRIMARY KEY (foreign key),
LockerStyleID int (foreign key),
NameplateID int (foreign key)
}
所有键都与其他表相关,但由于应用程序的分布方式,我们更容易将ID作为参数传递。 所以我们想这样做:
Locker l = new Locker {
UserID = userID,
LockerStyleID = lockerStyleID,
NameplateID = nameplateID
};
entities.AddLocker(l);
我们可以在LINQ-to-SQL中完成,但不能用EF?
这个缺失的功能似乎惹恼了很多人。
你必须这样做:
Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();
我一直在做的事情就是在部分类中自己添加外键属性:
public int UserID
{
get
{
if (this.User != null)
return this.User.UserID;
}
set
{
this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
}
}
继迪伦的回答之后,亚历克斯詹姆斯正在撰写一篇关于此问题的博客,完整地解释了这个问题以及如何解决部分类+属性解决方案。
另一种方法,如果你不介意'污染'你的db模式是添加一个计算列,例如,如果你有一个外键字段FK_Customer,你可以定义一个新的计算列FK_Customer_Computed,它具有表达式FK_Customer。 当您生成\\更新您的edmx模型时,该字段将显示为常规字段,然后您可以从实体对象中引用该字段。
或者等待EF4 :)
您可以创建一个基于这些ID构建实体的扩展方法。
使用EntityKey解决您的问题;)
ALK。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.