在 Entity Framework 中定义一对零关系

Defining one to zero relationship in Entity Framework

我不确定如何定义一段关系,我对 SQL 很陌生,所以我可能有误。

我有一个 Account 看起来像这样:

public class Account
{
    public int Id { get; set; }
    public string Username { get; set; }
    public LiveCurrencyInfo CurrencyInfo { get; set; }
}

和 LiveCurrencyInfo:

public class LiveCurrencyInfo
{
    public int Id { get; set; }
    public decimal USD { get; set; }
}

Account 需要 link 到单个 LiveCurrencyInfo 实体。

LiveCurrencyInfo 作为一个完全独立的实体存在,不依赖于任何其他东西 - 正如它所定义的那样。

这是 1..0 关系吗?

我试过这样定义它,但语法错误:

protected override void OnModelCreating(DbModelBuilder mb)
{
    mb.Entity<Account>()
        .HasRequired(l => l.CurrencyInfo)
        .Map(m =>                        //Can't call .Map here
        {
            m.MapLeftKey("AccountId");
            m.MapRightKey("LiveCurrencyInfoId");
            m.ToTable("UserAccountLiveCurrencyMapping");
        });
}

编辑

我认为表格如下所示:

Accounts         LiveCurrencyInfo         UserAccountLiveCurrencyMapping

Id | Username    Id | USD                 AccountId | LiveCurrencyInfoId
---+---------    ---+------               ----------+-------------------
20 | User_1      39 | 1.0                 20        | 39

Is this a 1..0 relationship?

首先你需要定义关系的终点(from -> to)。但是不,根本就没有这样的关系。

根据您的解释,LiveCurrencyInfoAccount的关系是1 -> 0..1。因此,根据 EF 术语,LiveCurrencyInfoprincipal 端,Accountdependent 端。因为据我所知,两个实体都应该有独立的 PK,那么 Account 需要 FK 列引用 LiveCurrencyInfo PK。

流式设置如下(为了使Map和其他关系流式API可用,您需要先完成HasXyz开始的关系结束定义,并使用适当的WithXyz):

mb.Entity<Account>()
    .HasRequired(e => e.CurrencyInfo)
    .WithOptional()
    .Map(m => m.MapKey("LiveCurrencyInfoId"));