0

我有一个 MVC 4 应用程序,它首先使用代码在我的 SQL Server DB 中生成表和列。我试图弄清楚我是如何得到一个不想要的额外 TABLE 的。我查看了一些问题,但没有找到与我完全相同的问题。我将尝试简单地解释这一点。

我添加了一个名为 Associate 的模型,它跟踪与我的客户有业务往来的同事。每个 Associate 都需要一个 AssociateTypedID 和 RegionID 的外键。

    namespace XXX.Models
    {
        public class Associate
        {
            public int AssociateId { get; set; }
            public string AssociateName { get; set; }
            public int AddressNumber { get; set; }
            public string AddressStreet { get; set; }
            public string City { get; set; }
            public string State { get; set; }
            public string Zipcode { get; set; }
            public string MainPhoneNumber { get; set; }
            public string AssociateEmail { get; set; }
            public string AssociateWebsite { get; set; }
            public string ContactFirstName { get; set; }
            public string ContactLastName { get; set; }
            public string ContactPhoneNumber { get; set; }
            public string ContactEmail { get; set; }
            public int RegionId { get; set; }
            public int AssociateTypeId { get; set; }

            public virtual ICollection<AssociateType> AssociateTypes { get; set; }
            public virtual ICollection<Region> Regions { get; set; }
        }
    }

    namespace XXX.Models
    {
        public class AssociateType
        {
            public int AssociateTypeId { get; set; }
            public string AssociateTypeName { get; set; }

            public virtual ICollection<Associate> Associates { get; set; }
        }
    }

    namespace XXX.Models
    {
        public class Region
        {
            public int RegionId { get; set; }
            public int RegionName { get; set; }
            public int RegionDescription { get; set; }

            public virtual ICollection<Associate> Associates { get; set; }
        }
    }

    namespace XXX.Models
    {
        public class XXXDb : DbContext
        {
            public XXXDb(): base("name=DefaultConnection")
            { 

            }
            public DbSet<Associate> Associates { get; set; }
            public DbSet<AssociateType> AssociateTypes { get; set; }
            public DbSet<Region> Regions { get; set; }
        }
    }

所以我已经更新了我上面的代码,并且我已经非常接近我需要在我的数据库中的位置了。我生成了以下表格。

Associates、AssociateTypes & Regions(每个都有我期望的列)

但是我现在有一个名为 RegionAssociates 的新表,其中包含以下列:

Region_RegionId (int) & Associate_AssociateId (int)

我的架构中不需要或不需要此表。

4

2 回答 2

0

不能确定您的配置中缺少什么,因为您没有发布它,但是如果您使用的是流利的 api,这样的事情应该可以解决问题:

modelBuilder.Entity<AssociateType>()
.HasKey(t => t.AssociateTypeId);

modelBuilder.Entity<Associate>()
.HasRequired(t => t.AssociateType)
.WithRequiredPrincipal(t => t.Associate);

以上改编自这篇文章http://msdn.microsoft.com/en-us/data/jj591620.aspx

于 2013-10-09T05:51:57.123 回答
0

您的课程与您对模型的描述不符。你是说

每个 Associate 都可以指定 AssociateType

我想同样AssociateType可以分配给更多的s,所以和Associate之间应该有1:N的关系。AssociateTypeAssociate

但是Associate该类以相反的方式定义关系 - 按照惯例在和public virtual ICollection<AssociateType> AssociateType { get; set; }之间创建 1:N 关系。AssociateAssociateType

你的类的正确定义是

public class Associate
    {
        public int AssociateId { get; set; }
        public string AssociateName { get; set; }
        public int AddressNumber { get; set; }
        public string AddressStreet { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Zipcode { get; set; }
        public string MainPhoneNumber { get; set; }
        public string AssociateEmail { get; set; }
        public string AssociateWebsite { get; set; }
        public int RegionId { get; set; }
        public int AssociateTypeId { get; set; }
        public virtual AssociateType AssociateType { get; set; }
        public string ContactFirstName { get; set; }
        public string ContactLastName { get; set; }
        public string ContactPhoneNumber { get; set; }
        public string ContactEmail { get; set; }

        public virtual ICollection<Region> Regions { get; set; }
    }

public class AssociateType
    {
        public int AssociateTypeId { get; set; }
        public string AssociateTypeName { get; set; }

        public virtual ICollection<Associate> Associates { get; set; }
    }
于 2013-10-09T09:29:57.497 回答