我首先使用Entity framework 5.0代码。我的模型类看起来像这样:
public class Client
{
public Client()
{
}
public int ClientID { get; private set; }
[Required]
public string CustomerNumber { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public MeritalStatus MeritalStatus { get; set; }
public DateTime? BirthDate { get; set; }
public Gender Gender { get; set; }
public string Email { get; set; }
public string Salutation { get; set; }
public string GetFullName()
{
return this.FirstName + " " + this.LastName;
}
}
我在global.asax中使用DropCreateDatabase初始化程序:
Database.SetInitializer<SiteObjectContext>(new DropCreateDatabaseIfModelChanges<SiteObjectContext>());
因此,每次模型更改时都会重新创建数据库。
生成的数据库表如下所示:
CREATE TABLE [dbo].[Clients](
[ClientID] [int] IDENTITY(1,1) NOT NULL,
[CustomerNumber] [nvarchar](max) NOT NULL,
[FirstName] [nvarchar](max) NOT NULL,
[LastName] [nvarchar](max) NOT NULL,
[MeritalStatus] [int] NOT NULL,
[BirthDate] [datetime] NULL,
[Gender] [int] NOT NULL,
[Email] [nvarchar](max) NULL,
[Salutation] [nvarchar](max) NULL,
[Visa_VisaID] [int] NULL)
它以某种方式产生冗余列Visa_VisaID 在模型上不存在。我怀疑它可能是一种缓存,因为它可能 我之前在桌子上有这个专栏。 尝试手动删除数据库,使用EF 6 RC而不是5.0,没有任何帮助,列 重新出现在每个数据库娱乐中。
签证实体:
public class Visa
{
public Visa()
{
}
public int VisaID { get; set; }
[Required]
public int ApplicationId { get; private set; }
[ForeignKey("ApplicationId")]
public virtual VisaApplication Application { get; set; }
public int MainApplicantId { get; private set; }
[ForeignKey("MainApplicantId")]
public virtual Client MainApplicant { get; set; }
public virtual ICollection<Client> IncludedCustomers { get; set; }
public int VisaTypeId { get; private set; }
[ForeignKey("VisaTypeId")]
public virtual VisaType VisaType { get; set; }
public DateTime StartDate { get; set; }
[Required]
public bool IsMultiple { get; set; }
[Required]
public DateTime ExpiryDateStay { get; set; }
public DateTime ExpiryDateTravel { get; set; }
[Required]
public DateTime FirstEntryBy { get; set; }
[Required]
public string Number { get; set; }
}
}
感谢任何帮助。
答案 0 :(得分:2)
由于Visa.IncludedCustomers属性,您的Visa_VisaID列已创建。 Visa_VisaID字段是一对多关系Visa-Clients签证的FK。创建它是因为关联不被视为双向关联。 如果您的案例是多对多关系,那么您应该覆盖DbContext的OnModelCreating以更改客户端和Visa之间的映射:
protected override void OnModelCreating(DbModelBuilder mb)
{
mb.Entity<Visa>().HasMany(v => v.IncludedCustomers).WithMany();
}
这将创建一个表VisaIncludedCustomers表,其中两个Id列作为外键(对于Visa和Client)。