Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有一对一或零关系的FluentAPI_C#_Entity Framework_One To One_Ef Fluent Api - Fatal编程技术网

C# 具有一对一或零关系的FluentAPI

C# 具有一对一或零关系的FluentAPI,c#,entity-framework,one-to-one,ef-fluent-api,C#,Entity Framework,One To One,Ef Fluent Api,我似乎不能理解FluentAPI,我真的需要教育自己,但我希望在这方面取得领先 我有两个对象,AccessLog,这将有一个可选的ExceptionLog对象,ExceptionLog将有一个可选的AccessLog 我相信这是一对一或零的呼叫 public class AccessLog : BaseLogObject { //...other properties public virtual ExceptionLog ExceptionLog { get; set; }

我似乎不能理解FluentAPI,我真的需要教育自己,但我希望在这方面取得领先

我有两个对象,
AccessLog
,这将有一个可选的
ExceptionLog
对象,
ExceptionLog
将有一个可选的
AccessLog

我相信这是一对一或零的呼叫

public class AccessLog : BaseLogObject
{
    //...other properties

    public virtual ExceptionLog ExceptionLog { get; set; }
}


public class ExceptionLog : BaseLogObject
{
    //...other properties

    [Display(Name = "Access Log")]
    public Guid? AccessLogID { get; set; }

    public virtual AccessLog AccessLog { get; set; }
}

//BaseLogObject (contains the Key for each object)
public class BaseLogObject
{
    public BaseLogObject()
    {
        Oid = Guid.NewGuid();
    }

    [Key]
    [Column(Order = 0)]
    public Guid Oid { get; set; }

}
我尝试了一些FluentAPI设置,但似乎都不起作用,例如:

modelBuilder.Entity<ExceptionLog>()
    .HasOptional(x => x.AccessLog)
    .WithOptionalDependent(x => x.ExceptionLog);

modelBuilder.Entity<AccessLog>()
    .HasOptional(x => x.ExceptionLog)
    .WithOptionalDependent(x => x.AccessLog);

modelBuilder.Entity<ExceptionLog>()
  .HasKey(x => x.AccessLogID);

我相信这很简单,就像反向属性一样。谢谢你的帮助

我相信我已经弄明白了,使用与OP相同的类,可以应用以下FluentAPI:

modelBuilder.Entity<ExceptionLog>()
    .HasOptional(x => x.AccessLog)
    .WithOptionalDependent(x => x.ExceptionLog)
    //.WithOptionalPrincipal(x => x.ExceptionLog)
    ;
modelBuilder.Entity()
.has可选(x=>x.AccessLog)
.带有可选依赖项(x=>x.ExceptionLog)
//.带有可选主体(x=>x.ExceptionLog)
;
这将允许我向
AccessLog
添加任意数量的记录,然后添加
ExceptionLog
记录,包括或不包括
AccessLogID

希望这能帮助别人

modelBuilder.Entity<ExceptionLog>()
    .HasOptional(x => x.AccessLog)
    .WithOptionalDependent(x => x.ExceptionLog)
    //.WithOptionalPrincipal(x => x.ExceptionLog)
    ;