gpt4 book ai didi

c# - EF4 Code-First CTP5 多对一

转载 作者:行者123 更新时间:2023-11-30 21:17:51 25 4
gpt4 key购买 nike

我一直在尝试让 EF4 CTP5 与现有数据库很好地配合使用,但一直在努力解决一些基本的映射问题。

到目前为止我有两个模型类:

public class Job
{
[Key, Column(Order = 0)]
public int JobNumber { get; set; }
[Key, Column(Order = 1)]
public int VersionNumber { get; set; }

public virtual User OwnedBy { get; set; }
}

[Table("Usernames")]
public class User
{
[Key]
public string Username { get; set; }

public string EmailAddress { get; set; }

public bool IsAdministrator { get; set; }
}

我的 DbContext 类将它们公开为 IDbSet

我可以查询我的用户,但是一旦我将 OwnedBy 字段添加到 Job 类中,我就开始在我对 Job 的所有测试中遇到此错误:

Invalid column name 'UserUsername'.

我希望它的行为类似于 NHibernate 的多对一,而我认为 EF4 将其视为复杂类型。应该怎么做?

最佳答案

UserUsername 是 EF Code First 为 Jobs 表中的外键选择的默认名称。显然,它与您现有数据库中 Jobs 表中 FK 列的名称不同。您需要覆盖此约定并更改 FK 的默认名称,以便它与您的数据库匹配。这是使用 Fluent API 完成的方式:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Job>()
.HasOptional(j => j.OwnedBy)
.WithMany()
.IsIndependent()
.Map(m => m.MapKey(u => u.Username, "TheFKNameInYourDB"));
}

关于c# - EF4 Code-First CTP5 多对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4575162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com