C# 如何首先使用Entity Framework 4.1代码强制数据库中一对多关系的一对一关系

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

我正在尝试在一个应用程序中首先将EF1更改为EF4.1代码,因为在SQL Server复制中使用了模式,因此无法更改该模式。该模式非常糟糕,在许多地方完全背对背地描述关系

我试图在两个类之间创建一对一的关系,但是数据库模式错误地将数据维护为一对多

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;