Swa*_*aff 8 c# entity-framework ef-code-first entity-framework-4.1
我试图在一个无法更改架构的应用程序中首先更改EF1 for EF4.1代码,因为它在SQL Server Replication中使用.架构非常糟糕,并且在许多地方描述完全回到前面的关系.
我想要做的是在两个类之间创建一对一的关系,但数据库模式错误地将数据维护为一对多.
public class ClassA
{
public ClassB
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,数据库中的表ClassB引用了ClassAId而不是具有ClassBId的ClassA,如下所示:
CREATE TABLE [dbo].[ClassA]
[Id] [bigint] IDENTITY
CREATE TABLE [dbo].[ClassB]
[Id] [bigint] IDENTITY
[ClassAId] [bigint]
Run Code Online (Sandbox Code Playgroud)
如何设置从EntityTypeConfiguration继承的映射文件以强制此关系.
public class ClassAMapping : EntityTypeConfiguration<ClassA>
{
public ClassA()
{
HasKey(f => f.Id);
// what happens here to force a one to one????
}
}
Run Code Online (Sandbox Code Playgroud)
感谢Jakub Konecki链接到文章,它实际上并没有包含我正在寻找的答案,但它确实链接到我找到答案的系列中的早期帖子.
强制这种一对一关联的方法如下:
public class ClassAMapping : EntityTypeConfiguration<ClassA>
{
public ClassA()
{
HasKey(x => x.Id);
HasOptional<ClassB>(x => x.ClassB)
.WithRequired()
.Map(x => x.MapKey("ClassBId"));
}
}
Run Code Online (Sandbox Code Playgroud)
此映射读作:
"The ClassA entity has an optional association with one ClassB entity, but this association is required for the ClassB entity."
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案是单向的,不允许以下内容:
ClassB b = new ClassB();
string test = b.ClassA.SomeString;
Run Code Online (Sandbox Code Playgroud)
如果需要双向关联,请查看找到的链接,进一步详细说明.
由Jakub链接的文章是一系列帖子的一部分,如果您正在尝试整理您的EF4.1关联,这些文章是一个很好的阅读.
归档时间: |
|
查看次数: |
9142 次 |
最近记录: |