Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 Fluent API未在SQL Server中创建标识规范(Is标识)_Sql Server 2008_Api_Asp.net Mvc 4_Poco_Fluent - Fatal编程技术网

Sql server 2008 Fluent API未在SQL Server中创建标识规范(Is标识)

Sql server 2008 Fluent API未在SQL Server中创建标识规范(Is标识),sql-server-2008,api,asp.net-mvc-4,poco,fluent,Sql Server 2008,Api,Asp.net Mvc 4,Poco,Fluent,我有一个MVC4应用程序,它首先使用代码。我已经创建了3个模型,我希望使用它们来跟踪我的客户同事,每个模型都指定了AssociateType(分销商或零售商)。每个同事也有一个指定的区域(北佛罗里达或南佛罗里达) 我首先创建了以下模型并运行updatedatabase在数据库中创建表 Associate.cs namespace XXX.Models { public class Associate { public int

我有一个MVC4应用程序,它首先使用代码。我已经创建了3个模型,我希望使用它们来跟踪我的客户同事,每个模型都指定了AssociateType(分销商或零售商)。每个同事也有一个指定的区域(北佛罗里达或南佛罗里达)

我首先创建了以下模型并运行updatedatabase在数据库中创建表

Associate.cs

    namespace XXX.Models
    {
        public class Associate
        {
            public int AssociateID { get; set; }
            [StringLength(50), Column(TypeName = "varchar")]
            public string AssociateName { get; set; }
            public int AddressNumber { get; set; }
            [StringLength(50), Column(TypeName = "varchar")]
            public string AddressStreet { get; set; }
            [StringLength(20), Column(TypeName = "varchar")]
            public string AddressCity { get; set; }
            [StringLength(2), Column(TypeName = "varchar")]
            public string State { get; set; }
            [StringLength(10), Column(TypeName = "varchar")]
            public string Zipcode { get; set; }
            [StringLength(16), Column(TypeName = "varchar")]
            public string MainPhoneNumber { get; set; }
            [StringLength(60), Column(TypeName = "varchar")]
            public string AssociateEmail { get; set; }
            [StringLength(80), Column(TypeName = "varchar")]
            public string AssociateWebsite { get; set; }

            //See Corresponding Navigation Properties
            [Display(Name = "Region")]
            public int RegionID { get; set; }
            [Display(Name = "AssociateType")]
            public int AssociateTypeID { get; set; }

            [StringLength(35), Column(TypeName = "varchar")]
            public string ContactFirstName { get; set; }
            [StringLength(35), Column(TypeName = "varchar")]
            public string ContactLastName { get; set; }
            [StringLength(16), Column(TypeName = "varchar")]
            public string ContactPhoneNumber { get; set; }
            [StringLength(60), Column(TypeName = "varchar")]
            public string ContactEmail { get; set; }

            public virtual Region Region { get; set; }
            public virtual AssociateType AssociateType { get; set; }
        }
    namespace XXX.Models
    {
        public class AssociateType
        {
            [ForeignKey("Associate")]
            public int AssociateTypeID { get; set; }
            [StringLength(50), Column(TypeName = "varchar")]
            public string AssociateTypeName { get; set; }

            public virtual Associate Associate { get; set; }
        }
    }
AssociateType.cs

    namespace XXX.Models
    {
        public class Associate
        {
            public int AssociateID { get; set; }
            [StringLength(50), Column(TypeName = "varchar")]
            public string AssociateName { get; set; }
            public int AddressNumber { get; set; }
            [StringLength(50), Column(TypeName = "varchar")]
            public string AddressStreet { get; set; }
            [StringLength(20), Column(TypeName = "varchar")]
            public string AddressCity { get; set; }
            [StringLength(2), Column(TypeName = "varchar")]
            public string State { get; set; }
            [StringLength(10), Column(TypeName = "varchar")]
            public string Zipcode { get; set; }
            [StringLength(16), Column(TypeName = "varchar")]
            public string MainPhoneNumber { get; set; }
            [StringLength(60), Column(TypeName = "varchar")]
            public string AssociateEmail { get; set; }
            [StringLength(80), Column(TypeName = "varchar")]
            public string AssociateWebsite { get; set; }

            //See Corresponding Navigation Properties
            [Display(Name = "Region")]
            public int RegionID { get; set; }
            [Display(Name = "AssociateType")]
            public int AssociateTypeID { get; set; }

            [StringLength(35), Column(TypeName = "varchar")]
            public string ContactFirstName { get; set; }
            [StringLength(35), Column(TypeName = "varchar")]
            public string ContactLastName { get; set; }
            [StringLength(16), Column(TypeName = "varchar")]
            public string ContactPhoneNumber { get; set; }
            [StringLength(60), Column(TypeName = "varchar")]
            public string ContactEmail { get; set; }

            public virtual Region Region { get; set; }
            public virtual AssociateType AssociateType { get; set; }
        }
    namespace XXX.Models
    {
        public class AssociateType
        {
            [ForeignKey("Associate")]
            public int AssociateTypeID { get; set; }
            [StringLength(50), Column(TypeName = "varchar")]
            public string AssociateTypeName { get; set; }

            public virtual Associate Associate { get; set; }
        }
    }
“Region.cs”

    namespace XXX.Models
    {
        public class Region
        {
            public int RegionID { get; set; }
            [StringLength(20), Column(TypeName = "varchar")]
            public string RegionName { get; set; }
            [Column(TypeName = "varchar(Max)")]
            public string RegionDescription { get; set; }

            public virtual Associate Associate { get; set; }
        }
    }
DBContext

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

            }
            public DbSet<Associate> Associates { get; set; }
            public DbSet<AssociateType> AssociateType { get; set; }
            public DbSet<Ingredient> Ingredients { get; set; }
            public DbSet<Region> Regions { get; set; }
            public DbSet<UserProfile> UserProfiles { get; set; }


            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
            modelBuilder.Entity<Associate>().HasKey(a => a.AssociateID);
            modelBuilder.Entity<Associate>().Property(a => a.AssociateID)
                        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            modelBuilder.Entity<Associate>().HasRequired(at => at.AssociateType)
                        .WithRequiredDependent();
            modelBuilder.Entity<Associate>().HasRequired(r => r.Region)
                        .WithRequiredDependent();

            modelBuilder.Entity<AssociateType>().HasKey(at => at.AssociateTypeID);
            modelBuilder.Entity<AssociateType>().Property(at => at.AssociateTypeID)
                        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            modelBuilder.Entity<Region>().HasKey(r => r.RegionID);
            modelBuilder.Entity<Region>().Property(r => r.RegionID)
                        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            }
        }
    }
namespace XXX.Models
{
公共类XXXDb:DbContext
{
public XXXDb():base(“name=DefaultConnection”)
{ 
}
公共数据库集关联{get;set;}
公共数据库集关联类型{get;set;}
公共数据库集{get;set;}
公共数据库集区域{get;set;}
公共数据库集用户配置文件{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasKey(a=>a.AssociateID);
modelBuilder.Entity().Property(a=>a.AssociateID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity().HasRequired(at=>at.AssociateType)
.WithRequiredDependent();
modelBuilder.Entity().HasRequired(r=>r.Region)
.WithRequiredDependent();
modelBuilder.Entity().HasKey(at=>at.AssociateTypeID);
modelBuilder.Entity().Property(at=>at.AssociateTypeID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity().HasKey(r=>r.RegionID);
modelBuilder.Entity().Property(r=>r.RegionID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
}
创建我的表时未将标识规范(Is IDENTITY)设置为“是”……原因是??因此,我无法向表中添加任何数据,或者出现错误:

无法将值NULL插入到表“XXXDb.dbo.Regions”的列“RegionID”中;列不允许为NULL。插入失败。

我的目标是只使用几行项目填充Region&AssociateType表

地区:(北佛罗里达和南佛罗里达) 协会类型(分销商和零售商)

这样,当我在CRUD操作期间添加一名员工时,我会有两个下拉列表,其中有AssociateType的选项(分销商和零售商)和associates Region的选项(N或S Florida)


任何帮助都将不胜感激。我对MVC感到非常失望。我已经取得了相当大的进步,但开始感到沮丧。

我做了一些测试,下面是在我的机器上运行的解决方案,我只是保留了你的OBEJCT的导航属性

public class Associate
{
    public int AssociateID { get; set; }

    public int RegionID { get; set; }
    public virtual Region Region { get; set; }
    public int AssociateTypeID { get; set; }
    public virtual AssociateType AssociateType { get; set; }
}

public class Region
{
    public int RegionID { get; set; }
    [StringLength(50), Column(TypeName = "varchar")]
    public string IngredientNameEn { get; set; }
    [Column(TypeName = "varchar(Max)")]
    public string IngredientNameEs { get; set; }

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

public class AssociateType
{
    public int AssociateTypeID { get; set; }
    [StringLength(50), Column(TypeName = "varchar")]
    public string AssociateTypeName { get; set; }

    public virtual List<Associate> Associates { get; set; }
}
公共类助理
{
public int AssociateID{get;set;}
public int RegionID{get;set;}
公共虚拟区域{get;set;}
public int AssociateTypeID{get;set;}
公共虚拟AssociateType AssociateType{get;set;}
}
公共类区域
{
public int RegionID{get;set;}
[StringLength(50),Column(TypeName=“varchar”)]
公共字符串IngredientNameEn{get;set;}
[列(TypeName=“varchar(Max)”)]
公共字符串IngRedientNames{get;set;}
公共虚拟列表关联{get;set;}
}
公共类关联类型
{
public int AssociateTypeID{get;set;}
[StringLength(50),Column(TypeName=“varchar”)]
公共字符串AssociateTypeName{get;set;}
公共虚拟列表关联{get;set;}
}
然后在OnModelCreating中,您必须添加以下两个命令,这将生成您想要的数据库

modelBuilder.Entity<Region>().HasMany(a => a.Associates)
            .WithRequired(r => r.Region).HasForeignKey(r => r.RegionID);
modelBuilder.Entity<AssociateType>().HasMany(a => a.Associates)
            .WithRequired(r => r.AssociateType).HasForeignKey(r => r.AssociateTypeID);
modelBuilder.Entity().HasMany(a=>a.Associates)
.WithRequired(r=>r.Region)。HasForeignKey(r=>r.RegionID);
modelBuilder.Entity().HasMany(a=>a.Associates)
.WithRequired(r=>r.AssociateType)。HasForeignKey(r=>r.AssociateTypeID);
在类构造函数中,您可以添加以下代码

 public XXXDb(): base("name=DefaultConnection")
 { 
     Database.SetInitializer(new DropCreateDatabaseIfModelChanges<XXXDb>());
     Database.Initialize(force: true);
 }
public XXXDb():base(“name=DefaultConnection”)
{ 
SetInitializer(新的DropCreateDatabaseIfModelChanges());
初始化(强制:true);
}

好的,现在我明白了,一个地区当然可以有很多员工,对吧?是的。但我会用不同的措辞。一个员工可以有一个地区。由该地区RegionID表示。与AssociateType相同。我做了您提供的更改:更新数据库-详细-强制无挂起的基于代码的迁移。应用自动迁移:201310301056183_AutomaticMigration.ALTER TABLE[dbo].[Associates]DROP约束[FK_dbo.Associates\u dbo.Regions\u AssociateID]System.Data.SqlClient.SqlException(0x80131904):“FK_dbo.Associates_dbo.Regions_AssociateID”不是约束。无法删除约束。请参阅以前的错误。“FK_dbo.Associates_dbo.Regions_AssociateID”不是约束。无法删除约束。请参阅以前的错误。在初始化数据库时是否会发生这种情况?如果是,请尝试手动删除数据库?如果有帮助,请每个关联te只能有1个RegionID和1个AssociateTypeID。我相信这种方式会创建一对多。上次我尝试手动删除db时,它彻底搞砸了我的项目。如果可能的话,我希望通过codefirst实现任何目标。我知道你试图提供帮助,但我不想再次尝试,也不想让自己退缩。