// НЕ РАБОТАЕТ
// 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();
Взгляните на this article для определения внешних ключей с беглым вместо этого.
modelBuilder.Entity<Post>().HasRequired(p => p.Blog)
.WithMany(b => b.Posts)
.HasForeignKey(p => p.FKBlogId);
У вас нет свойства навигации в ArticleGroup? Потому что тогда вы можете просто получить нужную вам группу в качестве объекта и установить ее в свойстве newArticle.ArticleGroup, а EF будет обрабатывать остальные. – dutzu
Код, который вы обозначили как WORKING, выглядит отлично. Свойство Artdatabase имеет тип «ArticleDatabase», поэтому вы можете назначать только что-то, что можно назначить «ArticleDatabase» - сначала вы пытаетесь установить его в Int (который не работает), но затем найдите ссылку на фактический экземпляр объект действительно работал ... что в этом плохого? –
@Webruster он говорит, что с нерабочим кодом он получает исключение, заявляя, что тип - Project.Models.Database.ArticleDatabase –