Fre*_*ood 3 .net c# ef-code-first entity-framework-4.3
下面的一对一关系示例抛出异常
public class User
{
public int Id { get; set; }
public Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
例外说:
无法确定类型"ConsoleApplication1.Address"和"ConsoleApplication1.User"之间关联的主要结束.必须使用关系流畅API或数据注释显式配置此关联的主要结尾.
如果我从地址中删除用户属性但我不想要它.
我怎么能有这样的关系,没有例外?
Mor*_*avi 13
虽然Eranga提供的答案是正确的,并且在用户和地址之间创建了共享主键关联,但由于此映射类型的限制,您可能不想使用它.
以下是创建1:1关联的另一种方法,称为一对一外键关联:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Address>()
.HasRequired(a => a.User)
.WithOptional(u => u.Address)
.Map(m => m.MapKey("UserId"));
}
Run Code Online (Sandbox Code Playgroud)
EF Code First将此识别为1:1关联,因此允许您在用户和地址之间建立双向关联.
现在,您需要做的就是在UserId列上定义一个Unique Key约束,以使您的关系在数据库端真正一对一.这样做的一种方法是使用已在自定义初始化程序类中重写的Seed方法:
class DbInitializer : DropCreateDatabaseAlways<Context>
{
protected override void Seed(Context context)
{
context.Database.ExecuteSqlCommand("ALTER TABLE Addresses ADD CONSTRAINT uc_User UNIQUE(UserId)");
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将产生以下架构:

| 归档时间: |
|
| 查看次数: |
11592 次 |
| 最近记录: |