C# 如何首先使用Entity Framework 4.1代码强制数据库中一对多关系的一对一关系
我正在尝试在一个应用程序中首先将EF1更改为EF4.1代码,因为在SQL Server复制中使用了模式,因此无法更改该模式。该模式非常糟糕,在许多地方完全背对背地描述关系 我试图在两个类之间创建一对一的关系,但是数据库模式错误地将数据维护为一对多C# 如何首先使用Entity Framework 4.1代码强制数据库中一对多关系的一对一关系,c#,entity-framework,ef-code-first,entity-framework-4.1,C#,Entity Framework,Ef Code First,Entity Framework 4.1,我正在尝试在一个应用程序中首先将EF1更改为EF4.1代码,因为在SQL Server复制中使用了模式,因此无法更改该模式。该模式非常糟糕,在许多地方完全背对背地描述关系 我试图在两个类之间创建一对一的关系,但是数据库模式错误地将数据维护为一对多 public class ClassA { public ClassB { get; set; } } 不幸的是,数据库中的表ClassB引用了ClassAId,而不是ClassA有ClassB
public class ClassA
{
public ClassB
{
get;
set;
}
}
不幸的是,数据库中的表ClassB引用了ClassAId,而不是ClassA有ClassBId,如下所示:
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????
}
}
公共类类映射:EntityTypeConfiguration
{
公共甲级()
{
HasKey(f=>f.Id);
//这里发生了什么事来强迫一对一的人????
}
}
看看这里:
这是一篇针对CTP5的文章,但我认为您将能够将fluent API调用“翻译”到RTm版本。多亏了这篇文章的链接,它实际上没有包含我想要的答案,但在我找到答案的系列文章中确实包含了
强制这种一对一关联的方法如下:
public class ClassAMapping : EntityTypeConfiguration<ClassA>
{
public ClassA()
{
HasKey(x => x.Id);
HasOptional<ClassB>(x => x.ClassB)
.WithRequired()
.Map(x => x.MapKey("ClassBId"));
}
}
请注意,此解决方案是单向的,不允许以下情况:
ClassB b = new ClassB();
string test = b.ClassA.SomeString;
如果需要双向关联,请查看详细说明
Jakub链接的这篇文章是一篇文章的一部分,如果你想整理你的EF4.1关联,那么这篇文章是一本不错的读物
ClassB b = new ClassB();
string test = b.ClassA.SomeString;