有两个类握手和byteArrays从基类OpcVariables继承
for (auto x: xv) { ... // x is a copy
for (auto& x: xv) { ... // x is a reference
映射继承类型的代码优先配置(VariableType = Discriminator)。
public class ByteArray : OpcVariable {}
public class Handshake : OpcVariable {}
public abstract partial class OpcVariable {}
还有一个定义类,包含2个继承类型ByteArray和Handshake
的集合modelBuilder.Entity<OpcVariable>()
.Map<ByteArray>(m => m.Requires("VariableType").HasValue("ByteArray"))
.Map<Handshake>(m => m.Requires("VariableType").HasValue("Handshake"));
代码第一(部分)配置映射以连接集合
partial class Definition : {
public virtual ICollection<ByteArray> ByteArrays { get; set; }
public virtual ICollection<Handshake> Handshakes { get; set; }
}
为了避免错误,我已将外键和相关对象从基类中删除,以及ByteArray作为握手类:
modelBuilder.Entity<Definition>()
.HasMany(e => e.Handshakes)
.WithRequired(e => e.Definition)
.HasForeignKey(e => e.DefinitionId)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Definition>()
.HasMany(e => e.ByteArrays)
.WithRequired(e => e.Definition)
.HasForeignKey(e => e.DefinitionId)
.WillCascadeOnDelete(false);
我已经成功地为对象Bytearray执行了CRUD。 但是,当我尝试使用查询获得定义时
public int DefinitionId { get; set; }
public virtual Definition Definition { get; set; }
我收到以下错误
var root = (Definition)(from x in Db.Definition.Include ("ByteArrays").Include("Handshakes").Include("PlcVariable") where x.Id == id select x).First();
似乎不可能有两个基于1个外键的集合。显然,FK DefinitionId变为DefinitionId 1 (数据库中不存在),可能是因为definitionId在aswell握手中被定义为bytearray。
有关获取映射的任何建议吗?