在 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)。但是不,根本就没有这样的关系。
根据您的解释,LiveCurrencyInfo
到Account
的关系是1 -> 0..1
。因此,根据 EF 术语,LiveCurrencyInfo
是 principal 端,Account
是 dependent 端。因为据我所知,两个实体都应该有独立的 PK,那么 Account
需要 FK 列引用 LiveCurrencyInfo
PK。
流式设置如下(为了使Map
和其他关系流式API可用,您需要先完成HasXyz
开始的关系结束定义,并使用适当的WithXyz
):
mb.Entity<Account>()
.HasRequired(e => e.CurrencyInfo)
.WithOptional()
.Map(m => m.MapKey("LiveCurrencyInfoId"));
我不确定如何定义一段关系,我对 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)。但是不,根本就没有这样的关系。
根据您的解释,LiveCurrencyInfo
到Account
的关系是1 -> 0..1
。因此,根据 EF 术语,LiveCurrencyInfo
是 principal 端,Account
是 dependent 端。因为据我所知,两个实体都应该有独立的 PK,那么 Account
需要 FK 列引用 LiveCurrencyInfo
PK。
流式设置如下(为了使Map
和其他关系流式API可用,您需要先完成HasXyz
开始的关系结束定义,并使用适当的WithXyz
):
mb.Entity<Account>()
.HasRequired(e => e.CurrencyInfo)
.WithOptional()
.Map(m => m.MapKey("LiveCurrencyInfoId"));