C# Linq到Sql问题

C# Linq到Sql问题,c#,sql,database,linq-to-sql,C#,Sql,Database,Linq To Sql,我有两个表用户和查询。它们通过查询表中的FK(用户ID)连接。 我需要添加查询,例如,由登录名为“Bob”的用户添加到所有用户 下面是我正在使用的一段代码: public bool SaveUserQuery(string userName, Query query) { var db = new UserDataClassesDataContext(); Table<User> users = db.Users; if (

我有两个表用户和查询。它们通过查询表中的FK(用户ID)连接。 我需要添加查询,例如,由登录名为“Bob”的用户添加到所有用户

下面是我正在使用的一段代码:

    public bool SaveUserQuery(string userName, Query query) {

        var db = new UserDataClassesDataContext();

        Table<User> users = db.Users;
        if ( userName.ToLower() == "bob" ) {
            foreach ( var user in users ) {
                var tempQuery = new Query();
                tempQuery.Name = query.Name;
                tempQuery.FolderName = query.FolderName;
                tempQuery.Layout = query.Layout;
                tempQuery.Description = query.Description;                    
                tempQuery.Query1 = query.Query1;
                tempQuery.UserID = user.UserId;

                try {
                    user.Queries.Add(q); 
                }              
                catch (Exception e) {

                    Logger.Log.Error("attach", e);
                }                    
            }
            db.SubmitChanges();
            return true;
        }
    }
public bool SaveUserQuery(字符串用户名,查询){
var db=new UserDataClassesDataContext();
表用户=db.users;
if(userName.ToLower()=“bob”){
foreach(用户中的var用户){
var tempQuery=新查询();
tempQuery.Name=query.Name;
tempQuery.FolderName=query.FolderName;
tempQuery.Layout=query.Layout;
tempQuery.Description=query.Description;
tempQuery.Query1=query.Query1;
tempQuery.UserID=user.UserID;
试一试{
user.querys.Add(q);
}              
捕获(例外e){
Logger.Log.Error(“附加”,e);
}                    
}
db.SubmitChanges();
返回true;
}
}
添加时会引发错误: INSERT语句与外键约束“FK_querys_Users”冲突。冲突发生在数据库“OLAPUsers”、表“dbo.Users”、列“UserId”中


如何解决此问题或归档我的目标?

确保在DB模式中正确设置了主键。您可以在没有主键的情况下查询表,但除非所有设置都正确,并且数据库的数据上下文视图是最新的,否则无法执行插入操作。

尝试以下操作:

public bool SaveUserQuery(string userName, Query query)
{
   var db = new DataContext();
   if ( userName.ToLower() == "bob" ) 
   {
      List<Query> queries = new List<Query>();
      foreach ( var user in db.GetTable<Users>()) 
      {
         Query tempQuery = new Query(query.Name, query.FolderName, query.Layout,  query.Description, query.Query1, user.UserId);
         //and ofc create this constructor
         queries.Add(tempQuery);             
       }
       db.GetTable<Query>().InsertAllOnSubmit(queries);
       db.SubmitChanges();
       return true;
    }
}
public bool SaveUserQuery(字符串用户名,查询)
{
var db=new DataContext();
if(userName.ToLower()=“bob”)
{
列表查询=新建列表();
foreach(db.GetTable()中的var user)
{
Query tempQuery=新查询(Query.Name、Query.FolderName、Query.Layout、Query.Description、Query.Query1、user.UserId);
//和ofc创建这个构造函数
添加(tempQuery);
}
db.GetTable().InsertAllOnSubmit(查询);
db.SubmitChanges();
返回true;
}
}

您的UserDataClassesDataContext工作正常吗?如果UserId属性设置不正确,则可能会导致此问题。设置断点并在迭代时检查user.UserId的值。确保这些值存在并对应于数据库中的有效用户ID。感谢帮助,问题在于外键约束,不知道我是如何解决的,但它只起作用=P