【发布时间】:2015-10-28 14:43:11
【问题描述】:
我在网站上搜索了解决我的问题,但我仍然没有解决它。 我有 2 个实体:
public class Article
{
[Key]
public Guid ID { get; set; }
public Guid? ApprovedBy_ID { get; set; }
public Guid CreatedBy_ID { get; set; }
public virtual Profile ApprovedBy { get; set; }
public virtual Profile CreatedBy { get; set; }
//New guid for new article
public Article()
{
ID = Guid.NewGuid();
}
}
public class Profile
{
[Key]
public Guid ID { get; set; }
[Required]
[StringLength(100)]
public string FullName { get; set; }
public Profile()
{
ID = Guid.NewGuid();
}
}
这是我的插入逻辑:
private readonly iContext context;
public ArticleLogic()
{
context = new iContext();
}
public IEnumerable<Article> GetAllArticle()
{
return context.Articles.Include("Categories").Include("Pictures").Include("ApprovedBy").Include("CreatedBy").Include("Template");
}
public Article AddArticle(Article article)
{
try
{
Profile pf = context.Profiles.First();
context.Profiles.Attach(pf);
Article art = new Article();
art.Title = article.Title;
art.Description = article.Description;
art.Content = article.Content;
art.Tag = article.Tag;
art.Template = article.Template;
//pf has ID = '0816f19c-31c1-4103-8f51-ba422beab1c0' (first row in database)
art.CreatedBy = pf;
art.CreatedBy_ID = pf.ID;
context.Articles.Add(art);
context.SaveChanges();
return article;
}
catch (Exception ex)
{
//But ex throw error duplicate ID = '7aa1d064-54ff-47b9-807d-db422fa71f8c' (second row in database)
Debug.WriteLine(ex.StackTrace);
throw ex;
}
}
数据库上下文:
public myContext()
: base("name=abc")
{
this.Configuration.LazyLoadingEnabled = true;
this.Configuration.ProxyCreationEnabled = false;
}
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<Role> Roles { get; set; }
public virtual DbSet<Template> Templates { get; set; }
public virtual DbSet<Article> Articles { get; set; }
public virtual DbSet<Picture> Pictures { get; set; }
public virtual DbSet<Profile> Profiles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//One-to-many: Article - Picture (nullable)
modelBuilder.Entity<Picture>()
.HasOptional<Article>(c => c.Article)
.WithMany(p => p.Pictures)
.HasForeignKey(f => f.ArticleId);
////One-to-many: Role - Profile
modelBuilder.Entity<Profile>()
.HasRequired<Role>(i => i.Role)
.WithMany(i => i.Profiles)
.HasForeignKey(f => f.RoleID);
///Many-to-many: Article - Category
modelBuilder.Entity<Article>()
.HasMany(t => t.Categories)
.WithMany(t => t.Articles)
.Map(m => {
m.ToTable("ArticleCategories");
m.MapLeftKey("ArticleId");
m.MapRightKey("CategoryId");
});
//
modelBuilder.Entity<Article>()
.HasOptional(a => a.ApprovedBy)
.WithMany(a => a.ArticleApprovedBy)
.HasForeignKey(f=>f.ApprovedBy_ID)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Article>()
.HasRequired(a => a.CreatedBy)
.WithMany(a => a.ArticleCreatedBy)
.HasForeignKey(f => f.CreatedBy_ID)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
我正在使用 CodeFirst EF 6.1.3,但出现错误:违反主键约束“PK_Profiles”。无法像此链接Entity Framework Code First - Cannot insert duplicate key in object 'dbo.T_CRProviders' 一样在对象“dbo.Profiles”中插入重复键? 谁能帮我?谢谢。
【问题讨论】:
-
您能否发布您用于构建数据库上下文的代码?
-
@ebramtharwat 我更新了我的数据库上下文
-
您在表格字段中设置了自动生成的
Guid(唯一标识符)? GUID 的默认值为00000000...,如果未设置Guid或表字段未自动生成(newsequentialid()),则每次发送。 -
可能是因为您没有设置 guid,您最终尝试插入多个具有空 guid 的 guid,以便它们匹配。
-
@PedroFernandesFilho 我在 public Article() { ID = Guid.NewGuid(); }
标签: asp.net entity-framework entity-framework-6