Учитывая это:
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();
}
Имеет эту ошибку:
Свойство LocationId не является объявленным свойством типа Park.Убедитесь, что свойство не было явно исключено из модели с помощью метода Ignore или аннотации данных NotMappedAttribute.Убедитесь, что это действительное примитивное свойство.
Как мне сопоставить объект 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 (через дизайнера), просто следуя шагам в Главе 2-11 Рецептов Entity Framework 4.0, Подход к решению проблемы.Теперь я пробую код сначала через EF 4.1
[EDIT]
Если я изменю ParkId на LocationId, все в порядке.Однако, используя дизайнерский подход, можно отобразить LocationId на ParkId таблицы Park;Сначала я хочу добиться того же самого с помощью кода
create table Park(
LocationId int not null primary key references Location(LocationId),
Name nvarchar(max) not null
);