Multiplicity constraint violated Entity framework 5

淺唱寂寞╮ 提交于 2020-01-09 11:38:25

问题


Hello i have 3 classes Person, UserProfile(it inherits Person) and Results, a Person can have one or more results, when i try to add i a result to a person a i get the error mentioned in the title, my classes are bellow. Any help would be appreciated.

[Table("People")]
public class Person : IPerson
{

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Name
    {
        get
        {
            return FirstName + " " + LastName;
        }
        set{}
    }

    public string Email { get; set; }
    public DateTime? LastModified { get; set; }
    public virtual ICollection<Result> Results { get; set; }
}

The UserProfile class

[Table("UserProfile")]

public class UserProfile : Person
{
    public UserProfile()
    {
        Faculty = new Faculty();
        Projects = new Collection<Project>();
    }
    public string UserName { get; set; }
    public string CNP { get; set; }
    public virtual Faculty Faculty { get; set; }
    public virtual ICollection<Project> Projects { get; set; }
}

The result class

public abstract class Result:INamedEntity
{
    protected Result()
    {
        ResultType = new ResultType();
    }
    public int Id { get; set; }
    public string Name{get;set;}
    public virtual ResultType ResultType { get; set; }
    public DateTime? LastModified { get; set; }
}

The problem function

public void AddResultForUser(int userId, Result result)
{
    _ctx.Users.Single(u => u.Id == userId).Results.Add(result);
}

Whenever after calling this function i call _ctx.SaveChanges()

I get the fallowing error

Multiplicity constraint violated. The role 'Person_Results_Source' of the relationship 'Repository.Person_Results' has multiplicity 1 or 0..1.

Thank you.


回答1:


Are you trying to add the same Result to several users?

In that case this will fail because entity framework will realize the Results collection of the Person class as a foreign key from Results to Persons. The mapping will be the same as if you add a Person navigation property to the Result class.

If you want Person and Result to have a many-to-many relationship you have to add a ICollection<Person> Persons property to the Results class to make EF understand that.



来源:https://stackoverflow.com/questions/20034003/multiplicity-constraint-violated-entity-framework-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!