我有一个新构建的MVC 5应用程序,使用默认模板PayCaddy.Client
。在构建时,没有任何mod,项目会创建自己的数据模型,覆盖ApplicationUser
等实体进行身份验证。我喜欢这个,只是创建项目,它已经准备好让我做自己的事情而不用太担心身份验证。
然而,现在,我自己的东西在一个单独的项目PayCaddy.Data
中包含一个单独的业务数据模型,其中包括在高尔夫游戏中下注的实体:
public class Bet: PayCaddyEntity
{
public virtual string BetName { get; set; }
public virtual int Amount { get; set; }
public virtual ApplicationUser Owner { get; set; }
public virtual DateTime OpenedOn { get; set; }
public virtual DateTime? ClosedOn { get; set; }
public ICollection<BetUser> Punters { get; set; }
}
此处使用ApplicationUser
来表示发起投注的用户,该投注将介于他们与Punters
之间。这使我陷入循环引用问题,我需要PayCaddy.Client
实体的ApplicationUser
引用,该项目需要Bet
实体的引用。
Identity框架非常复杂,简单地将其实体移动到我的数据模型中是不可能的。现在,我已将我的数据模型移动到客户端项目中,与身份代码相同,但如果有一种相对简单的方法可以克服此问题,我不想继续这样做。如果存在没有多天努力的解决方案,它们是什么?
答案 0 :(得分:0)
您是否可以尝试将ApplicationUser对象移出MVC项目并将其移动到新项目中。那样你的所有模型都在一个项目中,而你的MVC应用程序只能有一个对数据项目的引用?
OP编辑:只是一个警告:如果您将var dt = new Date();
dt.setTime(dt.getTime() + (60 * 60 * 1000));
// ^^^^^^^^^^^^^^---- one hour in milliseconds,
// which is our offset from UTC/GMT
var hours = dt.getUTCHours(); // Use UTC methods to get time
var minutes = dt.getUTCMinutes();
var seconds = dt.getUTCSeconds();
移到自己的数据模型中,则必须从ApplicationUser
派生DbContext
,而不是IdentityDbContext<ApplicationUser>
普通的DbContext
,您在base.OnModelCreating(modelBuilder)
中致电OnModelCreating
至关重要。通常,基本方法没有实现,但是这里有大约70行配置代码,这对于这个数据模型是必不可少的。