我有这两张桌子:
create table countries
(
int id identity primary key,
name nvarchar(20)
)
create table persons
(
int id identity primary key,
country1 int references countries(id),
country2 int references countries(id),
country3 int references countries(id)
)
我应该如何创建我的类和映射,以便将它们正确映射到这些表? (我使用EF4 CTP5 Code First)
答案 0 :(得分:2)
暂时忽略对多个国家/地区实体的非规范化引用,您可以编写以下内容:
public class Country
{
[Key]
public int CountryID { get; set; }
[MaxLength(20)]
public string Name { get; set; }
}
public class Person
{
public int PersonID { get; set; }
[MaxLength(20)]
public string Name { get; set; }
public Country Country1 { get; set; }
public Country Country2 { get; set; }
public Country Country3 { get; set; }
}
当然,您还需要DbContext:
public class Context : DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<Country> Countries { get; set; }
public Context(string dbName)
:base (dbName)
{
}
}
这将导致表模式镜像您的原始需求。
但请注意,如果您声明这样的类:
public class Country
{
[Key]
public int CountryID { get; set; }
[MaxLength(20)]
public string Name { get; set; }
public ICollection<Person> People { get; set; }
}
public class Person
{
public int PersonID { get; set; }
[MaxLength(20)]
public string Name { get; set; }
public ICollection<Country> Countries { get; set; }
}
在这种情况下,EF将创建一个多对多联接表,允许您将任意数量的国家/地区与任意数量的人相关联:
CREATE TABLE [CountryPersons]
(
[CountryCountryID] int NOT NULL,
[PersonPersonID] int NOT NULL
);
请注意,由于收集了国家/地区的人员和人群中的国家/地区,EF会推断出多对多关系。
HTH。