gpt4 book ai didi

entity-framework - EF 4.1 代码优先。具有与其基类的主键名称不同的主键名称的表类型继承

转载 作者:行者123 更新时间:2023-12-04 08:35:39 24 4
gpt4 key购买 nike

鉴于这种:

create table Location(
LocationId int identity(1,1) not null primary key,
Address nvarchar(max) not null,
City nvarchar(max) null,
State nvarchar(max) not null,
ZipCode nvarchar(max) not null
);



create table Park(
ParkId int not null primary key references Location(LocationId),
Name nvarchar(max) not null
);

我试过这个映射:
modelBuilder.Entity<Location>();
modelBuilder.Entity<Park>().ToTable("Park");
modelBuilder.Entity<Park>().Property(x => x.LocationId).HasColumnName("ParkId");

不幸的是,这没有用。
using (var db = new Ef())
{
var park = new Park { Name = "11th Street Park", Address = "801 11th Street", City = "Aledo", State = "TX", ZipCode = "76106" };
db.Set<Location>().Add(park);

db.SaveChanges();
}

它有这个错误:

The property 'LocationId' is not a declared property on type 'Park'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property.



我应该如何映射 Park 实体,使其 LocationId 属性属于 ParkId 列?

顺便说一下,我有这个映射:
public class Location
{
public virtual int LocationId { get; set; }
public virtual string Address { get; set; }
public virtual string City { get; set; }
public virtual string State { get; set; }
public virtual string ZipCode { get; set; }
}

public class Park : Location
{
public virtual string Name { get; set; }
}

如果有帮助,这在 EF 4.0 中是可能的(通过设计器),只需按照 Entity Framework 4.0 Recipes, Problem Solution Approach 第 2-11 章中的步骤进行操作。现在我首先通过 EF 4.1 在代码上尝试它

[编辑]

如果我将 ParkId 更改为 LocationId,则一切正常。但是,使用设计器方法,可以将 LocationId 映射到表 Park 的 ParkId;我想先用代码实现同样的事情
create table Park( 
LocationId int not null primary key references Location(LocationId),
Name nvarchar(max) not null
);

最佳答案

据我所知(并且我多次尝试),代码首先不支持此 => 您的派生类型应为主键使用相同的列名。

这个问题可以非常简单地描述:当前的流畅映射实现不允许覆盖来自父实体的映射规则 => 父实体定义所有派生实体中主键列的名称。

IMO 最可能的原因是它确实是首先设计为代码的,您没有现有的数据库并且您不必费心数据库命名 - 由 EF 根据需要定义名称。 DbContext API 发布后,人们开始大量将其与现有数据库一起使用。但这里出现了一个问题:初始用例不计算在内,因此某些在 EDMX 中很容易完成的场景是不可能的。这是其中之一。

关于entity-framework - EF 4.1 代码优先。具有与其基类的主键名称不同的主键名称的表类型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278992/

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