C#实体框架——添加新记录
添加具有关系Id的记录时,此代码正确吗? 如果我直接输入Id,我会得到以下错误 无法将类型“int”隐式转换为“Project.Models.Database.ArticleDatabase” 此代码是否低于正确的方式C#实体框架——添加新记录,c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,添加具有关系Id的记录时,此代码正确吗? 如果我直接输入Id,我会得到以下错误 无法将类型“int”隐式转换为“Project.Models.Database.ArticleDatabase” 此代码是否低于正确的方式 var newArticle = new Articles(); newArticle.Artname = addarticle.Articlename; //NOT WORKING // newArticle.Artdatabase = addarticle.Article
var newArticle = new Articles();
newArticle.Artname = addarticle.Articlename;
//NOT WORKING
// newArticle.Artdatabase = addarticle.ArticlegroupId
//WORKING, SEEMS WRONG
newArticle.Artdatabase = _context.ArticleDatabase.SingleOrDefault(c => c.Id == addarticle.ArticlegroupId);
newArticle.Articleaadddate = DateTime.Now;
newArticle.Articlelastedit = DateTime.Now;
newArticle.Artstatus = 3;
_context.Articles.Add(newArticle);
_context.SaveChanges();
//不起作用
//newArticle.Artdatabase=addarticle.ArticlegroupId
这是因为您试图将ArticlegroupId
(似乎是int
)设置为类型为ArticleDatabase
的属性
我假设您的模型如下所示:
public class Articles
{
public string Artname { get; set; }
[ForeignKey("ArtdatabaseId")]
public virtual ArticleDataBase Artdatabase { get; set; }
// For alternative 2 you'll need this.
public int ArtdatabaseId { get; set; }
}
备选方案1。使用导航属性。使用导航属性时,需要附加它
var newArticle = new Articles();
newArticle.Artname = addarticle.Articlename;
// Create the entity and attach it.
var artDataBase = new ArticleDataBase
{
Id = addarticle.ArticlegroupId
};
_context.ArticleDatabase.Attach(artDataBase);
newArticle.Artdatabase = artDataBase;
newArticle.Articleaadddate = DateTime.Now;
newArticle.Articlelastedit = DateTime.Now;
newArticle.Artstatus = 3;
_context.Articles.Add(newArticle);
_context.SaveChanges();
备选方案2。使用外键属性。使用此选项时,需要在模型中明确定义外键
var newArticle = new Articles();
newArticle.Artname = addarticle.Articlename;
// Note that I'm using ArtdatabaseId and not Artdatabase.
newArticle.ArtdatabaseId = addarticle.ArticlegroupId
newArticle.Articleaadddate = DateTime.Now;
newArticle.Articlelastedit = DateTime.Now;
newArticle.Artstatus = 3;
_context.Articles.Add(newArticle);
_context.SaveChanges();
看看如何使用fluent定义外键
modelBuilder.Entity<Post>().HasRequired(p => p.Blog)
.WithMany(b => b.Posts)
.HasForeignKey(p => p.FKBlogId);
modelBuilder.Entity().HasRequired(p=>p.Blog)
.有许多(b=>b.职位)
.HasForeignKey(p=>p.FKBlogId);
//不起作用
//newArticle.Artdatabase=addarticle.ArticlegroupId
这是因为您试图将ArticlegroupId
(似乎是int
)设置为类型为ArticleDatabase
的属性
我假设您的模型如下所示:
public class Articles
{
public string Artname { get; set; }
[ForeignKey("ArtdatabaseId")]
public virtual ArticleDataBase Artdatabase { get; set; }
// For alternative 2 you'll need this.
public int ArtdatabaseId { get; set; }
}
备选方案1。使用导航属性。使用导航属性时,需要附加它
var newArticle = new Articles();
newArticle.Artname = addarticle.Articlename;
// Create the entity and attach it.
var artDataBase = new ArticleDataBase
{
Id = addarticle.ArticlegroupId
};
_context.ArticleDatabase.Attach(artDataBase);
newArticle.Artdatabase = artDataBase;
newArticle.Articleaadddate = DateTime.Now;
newArticle.Articlelastedit = DateTime.Now;
newArticle.Artstatus = 3;
_context.Articles.Add(newArticle);
_context.SaveChanges();
备选方案2。使用外键属性。使用此选项时,需要在模型中明确定义外键
var newArticle = new Articles();
newArticle.Artname = addarticle.Articlename;
// Note that I'm using ArtdatabaseId and not Artdatabase.
newArticle.ArtdatabaseId = addarticle.ArticlegroupId
newArticle.Articleaadddate = DateTime.Now;
newArticle.Articlelastedit = DateTime.Now;
newArticle.Artstatus = 3;
_context.Articles.Add(newArticle);
_context.SaveChanges();
看看如何使用fluent定义外键
modelBuilder.Entity<Post>().HasRequired(p => p.Blog)
.WithMany(b => b.Posts)
.HasForeignKey(p => p.FKBlogId);
modelBuilder.Entity().HasRequired(p=>p.Blog)
.有许多(b=>b.职位)
.HasForeignKey(p=>p.FKBlogId);
您没有到ArticleGroup的导航属性吗?因为这样你就可以得到你需要的组作为一个实体,并在newArticle.ArticleGroup属性上设置它,EF将处理其余的部分。Artdatabase属性的类型为“ArticleDatabase”,因此您只能将可分配的内容分配给“ArticleDatabase”-您首先尝试将其设置为Int(不起作用),但找到对对象实际实例的引用确实起作用。。。这有什么不对吗?@Webruster他说,如果代码不起作用,他会得到一个异常,声明类型是Project.Models.Database。ArticleDatabase@ScottPerham-我不认为这是一个异常,而是一个编译时错误。你是对的,老实说,我并不是真的想要异常。。。我的意思是“错误”:)您没有ArticleGroup的导航属性吗?因为这样你就可以得到你需要的组作为一个实体,并在newArticle.ArticleGroup属性上设置它,EF将处理其余的部分。Artdatabase属性的类型为“ArticleDatabase”,因此您只能将可分配的内容分配给“ArticleDatabase”-您首先尝试将其设置为Int(不起作用),但找到对对象实际实例的引用确实起作用。。。这有什么不对吗?@Webruster他说,如果代码不起作用,他会得到一个异常,声明类型是Project.Models.Database。ArticleDatabase@ScottPerham-我不认为这是一个异常,而是一个编译时错误。你是对的,老实说,我并不是真的想要异常。。。我的意思是“错误”: