[英]Entity Framework 5.0 code first one to one and one to many relationship
[英]How to use Entity Framework 4.1 Code First to force a one to one relationship for a one to many relationship in the database
我試圖在一個無法更改架構的應用程序中首先更改EF1 for EF4.1代碼,因為它在SQL Server Replication中使用。 架構非常糟糕,並且在許多地方描述完全回到前面的關系。
我想要做的是在兩個類之間創建一對一的關系,但數據庫模式錯誤地將數據維護為一對多。
public class ClassA
{
public ClassB
{
get;
set;
}
}
不幸的是,數據庫中的表ClassB引用了ClassAId而不是具有ClassBId的ClassA,如下所示:
CREATE TABLE [dbo].[ClassA]
[Id] [bigint] IDENTITY
CREATE TABLE [dbo].[ClassB]
[Id] [bigint] IDENTITY
[ClassAId] [bigint]
如何設置從EntityTypeConfiguration繼承的映射文件以強制此關系。
public class ClassAMapping : EntityTypeConfiguration<ClassA>
{
public ClassA()
{
HasKey(f => f.Id);
// what happens here to force a one to one????
}
}
感謝Jakub Konecki鏈接到文章,它實際上並沒有包含我正在尋找的答案,但它確實鏈接到我找到答案的系列中的早期帖子 。
強制這種一對一關聯的方法如下:
public class ClassAMapping : EntityTypeConfiguration<ClassA>
{
public ClassA()
{
HasKey(x => x.Id);
HasOptional<ClassB>(x => x.ClassB)
.WithRequired()
.Map(x => x.MapKey("ClassBId"));
}
}
此映射讀作:
"The ClassA entity has an optional association with one ClassB entity, but this association is required for the ClassB entity."
請注意,此解決方案是單向的,不允許以下內容:
ClassB b = new ClassB();
string test = b.ClassA.SomeString;
如果需要雙向關聯,請查看找到的鏈接,進一步詳細說明。
看看這里:
這是一篇針對CTP5的文章,但我認為您可以將流暢的API調用“轉換”為RTm版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.