응용 프로그램을 실행할 때 다음 오류가 발생합니다. 내 문맥에 대해 DropCreateDatabaseAlways 할 응용 프로그램을 강제로 해요 그래서 같은 키를 여러 엔터티를 삽입하려면 노력하고있어 말할 것이라고 확신하지 않습니다.EF 코드 첫 번째 및 mvc 3.0 관계에 문제가 발생했습니다.
사용자와 메시지의 연결 방법에 문제가있을 수 있습니다. 나는 다음을 추가해야만했다 :
modelBuilder.Entity<Message>()
.HasRequired(m => m.UserSentFrom)
.WithRequiredDependent()
.WillCascadeOnDelete(false);
나는 순환 참조에 대한 경고를 받고 있었기 때문에 willcascadeondelete를 false로 설정해야했다. 내 디자인에 문제가있을 경우
알려, 그러나 이것은 내가 할 노력하고있어입니다 : 메시지는 하나 FromUser 메시지가 많은에게 연계
어떤 도움을 보유하고 있으며, 사용자가 많은 메시지가 이것이 나를 미치게 만들면 감사하겠습니다.
{ "같은 키를 사용하여 여러 개체를 삽입 할 때 충돌 변경.이 발생할 수 있습니다 발견했습니다."}
public class User
{
public int Id { get; set; }
[Required(ErrorMessage="Username is required")]
public string Username { get; set; }
[Required(ErrorMessage = "Password is required")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required(ErrorMessage="Email Address is required")]
[DataType(DataType.EmailAddress)]
public string UserEmailAddress { get; set; }
[DisplayFormat(DataFormatString="{0:d}",ApplyFormatInEditMode=true)]
public DateTime DateCreated { get; set; }
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public DateTime LastUpdated { get; set; }
public virtual ICollection<Message> Messages { get; set; }
public User()
{
Messages = new List<Message>();
}
}
public class Message
{
public int Id { get; set; }
public DateTime DateSent { get; set; }
public virtual ICollection<User> UserSentTo { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public int UserSentFromId { get; set; }
public virtual User UserSentFrom { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Message>()
.HasMany(m => m.UserSentTo).WithMany(u => u.Messages)
.Map(t => t.MapLeftKey("MessageId")
.MapRightKey("UserId")
.ToTable("MessagesUserSentTo"));
modelBuilder.Entity<Message>()
.HasRequired(m => m.UserSentFrom)
.WithRequiredDependent()
.WillCascadeOnDelete(false);
}
protected override void Seed(WebsiteGameContext context)
{
var users = new List<User>
{
new User { Username = "Admin", UserEmailAddress="[email protected]", DateCreated = DateTime.Now, LastUpdated = DateTime.Now},
new User { Username = "Member", UserEmailAddress="[email protected]",DateCreated = DateTime.Now, LastUpdated = DateTime.Now}
};
users.ForEach(u => context.Users.Add(u));
context.SaveChanges();
var messages = new List<Message>
{
new Message { DateSent=DateTime.Now, Title="Sent From Admin", Body="There should be 2 users that this was sent to", UserSentFromId=users[0].Id,UserSentTo= new List<User>()},
new Message { DateSent=DateTime.Now, Title="Sent From Member", Body="There should be 1 user that this was sent to", UserSentFromId=users[1].Id,UserSentTo= new List<User>()}
};
messages.ForEach(m => context.Messages.Add(m));
context.SaveChanges();
messages[0].UserSentTo.Add(users[0]);
messages[0].UserSentTo.Add(users[1]);
messages[1].UserSentTo.Add(users[0]);
context.SaveChanges();
}
감사합니다. Wim. 여기서 배우려고 노력하면서 내가 잘못하고있는 것에 대해 조금 설명해 주시겠습니까? 왜 작동하지 않았습니까? – SOfanatic
가장 중요한 것은 사용자 엔티티가 완료되지 않았기 때문입니다. MessagesReceived 만 정의했습니다. MessageSend를 사용하지 않으면 두 번째 매핑이 제대로 이루어지지 않습니다. foreignKey로 정의되지 않은 UserSendFromId에 의해 오류가 발생했습니다. – Wim
항상 데이터베이스에서 데이터 모델을 만들고 http://blogs.msdn.com/b/adonet/archive/2012/04/09/ef-power-tools-beta-data/ko-kr/ko-kr/ko/에서 엔티티와 매핑을 리버스 엔지니어링하는 데 도움이됩니다. 2-available.aspx – Wim