c# - 违反了多重约束 Entity Framework 5

标签 c# asp.net sql-server asp.net-mvc entity-framework

你好,我有 3 个类 Person、UserProfile(它继承了 Person)和 Results,一个 Person 可以有一个或多个结果,当我尝试将结果添加到一个人时,我得到了标题中提到的错误,我的类是吼叫。任何帮助将不胜感激。

[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; }
}

用户配置文件类

[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; }
}

结果类

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; }
}

问题函数

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

每当调用此函数后我调用 _ctx.SaveChanges()

我得到了休闲错误

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

谢谢。

最佳答案

您是否尝试添加相同的 Result给几个用户?

在那种情况下,这将失败,因为 Entity Framework 将实现 Results收藏Person类作为来自 Results 的外键至 Persons .映射将与添加 Person 相同。导航属性到 Result类。

如果你想要PersonResult要建立多对多关系,您必须添加 ICollection<Person> Persons属性(property)给Results让 EF 理解这一点的类。

关于c# - 违反了多重约束 Entity Framework 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20034003/

相关文章:

c# - 调试调用 .Net(C#) dll 的 VB6 项目

asp.net - NEST在.net中进行 Elasticsearch

sql-server - 文件组中没有足够的空间来完成空文件操作

c# - asp.net C# 中的时差

json - 调用 REST api 并将生成的 json 数据插入 SQL Server 的最简单方法

sql - 在一个语句中选择并分配给变量?

c# - ASP.NET中的Token方法,接受curl中的每个HTTP方法

c# - 如何使用控制代码 (ASP.NET) 保留特定于控制的 css

c# - .Cast 优于 .Select 有什么好处?

javascript - jQuery $.get() 内存使用情况