我有以下实体模型。当我尝试保存包含新帐户的新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; }
}
答案 0 :(得分:2)
这些类中的任何一个都是“复杂类型”,还是它们都是具有自己对应表的实体?
如果它们是实体,您确实可以将EF配置为不需要类本身中的外键属性。在DbContext类中,覆盖OnModelCreating
并添加一些配置代码:
modelBuilder.Entity<User>().HasRequired(u => u.Account).WithRequiredPrincipal();
如果我已经做到了这一点,那将在用户和帐户之间配置“required:required”关系,而不需要在任何一个类上都有任何外键属性。
答案 1 :(得分:1)
您必须从类Id
中删除属性Account
,否则实体框架会将类Account
视为实体,而不是复杂类型。