Cel*_*Cel 0 .net c# sql orm entity-framework
我使用适配器能够将接口而不是具体类型插入dbcontext.适配器可以独立工作,但是我无法将任何一对一(父子)关系保存到数据库中:
public void SaveDomain(IDomain domain){
_entityRepositor = new Donors();
_entityRepositor.DomainReps.Add(new DomainRep(domain));
}
Run Code Online (Sandbox Code Playgroud)
Conflicting changes to the role 'DomainRep_TopLevelDomainRep_Target' of the relationship 'Edonics.Repositor.DomainRep_TopLevelDomainRep' have been detected.
public class DomainRep: IDomain
{
private readonly IDomain _adaptee;
public DomainRep(IDomain adaptee)
{
_adaptee = adaptee;
}
[NotMapped]
public IDomain Adaptee
{
get { return _adaptee; }
}
public string Id
{
get { return _adaptee.Id; }
set { _adaptee.Id = value; }
}
public string TopLevelDomainRepId
{
get { return _adaptee.Tld.Id; }
set { }
}
[ForeignKey("TopLevelDomainRepId")]
public TopLevelDomainRep TopLevelDomainRep
{
get { return new TopLevelDomainRep(Tld); }
set { Tld = value.Adaptee; }
}
public ITopLevelDomain Tld
{
get { return _adaptee.Tld; }
set { _adaptee.Tld = value; }
}
public string SecondLevelDomainRepId
{
get { return _adaptee.Sld.Id; }
set { }
}
[ForeignKey("SecondLevelDomainRepId")]
public SecondLevelDomainRep SecondLevelDomainRep
{
get { return new SecondLevelDomainRep(Sld); }
set { Sld = value.Adaptee; }
}
public ISecondLevelDomain Sld
{
get { return _adaptee.Sld; }
set { _adaptee.Sld = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
您的适配器模式会干扰EF的工作方式.您正在为实体的导航属性提供不同的实现.例如,如果TopLevelDomainRep多次访问属性,它将返回多个实例,但具有相同的ID /实体密钥.对于给定的主键值,EF仅处理每个上下文的单个实例.
您可以在EF实体之上创建域图层,也可以按照预期的方式使用EF实体.
| 归档时间: |
|
| 查看次数: |
2269 次 |
| 最近记录: |