管理实体框架中的复杂类型?

时间:2013-03-03 23:31:20

标签: c# .net entity-framework

我有以下实体模型。当我尝试保存包含新帐户的新User对象时,它会抛出DBUpdateException:保存不公开其关系的外键属性的实体时发生错误。

是否可以在不向模型添加外键的情况下为两个对象提供映射。我讨厌在我的模型中使用外键的想法。 如果没有其他解决方案,我将如何使用外键解决此问题?

public class User
{
   public virtual int Id { get; set; }
   public virtual Account Account { get; set; }
}

public class Account
{
   public virtual int Id { get; set; }
}

2 个答案:

答案 0 :(得分:2)

这些类中的任何一个都是“复杂类型”,还是它们都是具有自己对应表的实体?

如果它们是实体,您确实可以将EF配置为不需要类本身中的外键属性。在DbContext类中,覆盖OnModelCreating并添加一些配置代码:

modelBuilder.Entity<User>().HasRequired(u => u.Account).WithRequiredPrincipal();

如果我已经做到了这一点,那将在用户和帐户之间配置“required:required”关系,而不需要在任何一个类上都有任何外键属性。

答案 1 :(得分:1)

您必须从类Id中删除属性Account,否则实体框架会将类Account视为实体,而不是复杂类型。