[英]How to make composite key based on 2 foreign keys in Entity Framework?
是否有可能做到這一點?
如果是這樣,在模型中定義這種情況的語法是什么
表格1
Key 1
表2
Key 2
表3
composite of Key 1, Key 2
正式地,在數據庫中具有外鍵約束不是強制性的-您只需要外鍵。 如果您沒有FK約束,那么您仍然可以輕松地在EF中重現此結構(您沒有提到EF版本,因此我使用的是EF6)。
1.連接字符串
使用顯式加載時,您需要啟用MARS連接以避免此錯誤 ( 請參見第4項 ):
<configuration>
<connectionStrings>
<add name="StackOverflowContext"
providerName="System.Data.SqlClient"
connectionString="Server=(localdb)\mssqllocaldb;Database=StackOverflow;Trusted_Connection=Yes;MultipleActiveResultSets=True;" />
</connectionStrings>
</configuration>
2. T-SQL創建測試表和種子:
create table dbo.Table1 (Table1Id int primary key);
create table dbo.Table2 (Table2Id int primary key);
create table dbo.Table3 (Table1Id int, Table2Id int);
insert into dbo.Table1 values (10), (20);
insert into dbo.Table2 values (30), (40);
insert into dbo.Table3 values (10, 30);
insert into dbo.Table3 values (20, 40);
3. EF上下文和類
public class StackOverflowContext : DbContext
{
public DbSet<Table1> Table1 { get; set; }
public DbSet<Table2> Table2 { get; set; }
public DbSet<Table3> Table3 { get; set; }
}
[Table("Table1")]
public class Table1
{
public int Table1Id { get; set; }
}
[Table("Table2")]
public class Table2
{
public int Table2Id { get; set; }
}
[Table("Table3")]
public class Table3
{
// Composite key of two keys
[Key, Column(Order = 1)]
public int Table1Id { get; set; }
[Key, Column(Order = 2)]
public int Table2Id { get; set; }
// Navigation properties
public Table1 Table1 { get; set; }
public Table2 Table2 { get; set; }
}
4.從表3獲取數據
現在,從Table1Id
獲取數據,而不是直接通過導航屬性讀取Table1Id
和Table2Id
屬性。 為此,我使用顯式加載:
private void OnRun(object sender, EventArgs e)
{
using (var db = new StackOverflowContext())
{
var t3 = db.Table3;
foreach (Table3 t in t3)
{
// Explicit loading
db.Entry(t).Reference(p => p.Table1).Load();
// Get Table1Id through navigation property
int id = t.Table1.Table1Id;
}
}
}
希望這可以清除圖片!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.