C# EF4代码第一个CTP5多对一

C# EF4代码第一个CTP5多对一,c#,entity-framework-4,code-first,C#,Entity Framework 4,Code First,我一直在努力让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 Ow

我一直在努力让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; }
}

我的DbContext类将它们公开为IDbSet

我可以查询我的用户,但在我将OwnedBy字段添加到Job类后,我就开始在对Job的所有测试中出现以下错误:

列名“UserUsername”无效


我希望它的行为类似于NHibernate的多对一,而我认为EF4将其视为一个复杂类型。应该如何做到这一点?

尝试让它从您的模式中创建新的数据库,并查看它期望的列名称


我想这是主人的钥匙。它试图根据其内部约定对其命名,这与您命名foring键列的方式不兼容。不,它实际上是将其视为多对一。

UserUsername
是EF code首先为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"));
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.has可选(j=>j.OwnedBy)
.有很多
.IsIndependent()
.Map(m=>m.MapKey(u=>u.Username,“TheFKNameInYourDB”);
}

生成异常声明的
:序列包含多个匹配元素。有什么建议吗?
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Job>()
                .HasOptional(j => j.OwnedBy)
                .WithMany()
                .IsIndependent()
                .Map(m => m.MapKey(u => u.Username, "TheFKNameInYourDB"));
}