在Entity Framework中定义一对零关系

时间:2018-01-31 18:40:06

标签: c# entity-framework ef-fluent-api

我有一段关系,我不确定如何定义,我对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需要指向单个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

1 个答案:

答案 0 :(得分:2)

  

这是一个1..0的关系吗?

首先,您需要定义关系结束(从 - &gt;到)。但不,根本就没有这种关系。

根据您的解释,LiveCurrencyInfoAccount之间的关系为1 -> 0..1。因此,EF条款LiveCurrencyInfo主要结束,Account依赖结束。由于据我所知,两个实体都应该有独立的PK,因此Account需要FK列引用LiveCurrencyInfo PK。

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

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