Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql Linq 2 SQL,无法创建关联_Linq To Sql - Fatal编程技术网

Linq to sql Linq 2 SQL,无法创建关联

Linq to sql Linq 2 SQL,无法创建关联,linq-to-sql,Linq To Sql,我使用的是一些遗留数据库,但基本思想如下: Item Id INT PK NOT NULL Description VARCHAR(50) NOT NULL TranslationId INT NULLABLE Translation Id INT PK NOT NULL Language VARCHAR(10) PK NOT NULL Translation VARCHAR(50) NOT NULL 基本上每一个项目都有很多翻译,看起来很简单。这些表没有外键,因此我正在手动尝试在DBML中

我使用的是一些遗留数据库,但基本思想如下:

Item
Id INT PK NOT NULL
Description VARCHAR(50) NOT NULL
TranslationId INT NULLABLE

Translation
Id INT PK NOT NULL
Language VARCHAR(10) PK NOT NULL
Translation VARCHAR(50) NOT NULL
基本上每一个项目都有很多翻译,看起来很简单。这些表没有外键,因此我正在手动尝试在DBML中创建关联,但是由于translationID和Translation表中的PK之间存在NULL差异,因此它失败了

我是否有办法让这个协会运作,例如:

item.Translations
错误消息: 无法创建关联“项目翻译”。属性没有匹配的类型:“TranslationId”、“Id”

我知道这与TranslationId为NULL有关,因为另一个与Translations关联的表可以正常工作,但是它的TranslationId列不是NULL

翻译中的示例数据:

Id Language Translation
1  en-us    some text
1  en-gb    some text
2  en-us    some text
2  en-gb    some text

目前,您已经进行了此设置,以便一个翻译可以包含多个项目,而不是您声明一个项目可以包含多个翻译的方式。要解决这个问题,您需要在
Translation
表中添加
itemId
,并从
Item
表中删除
translationId

一旦你得到处理,如果你有问题,请张贴你得到的错误消息

编辑:

LINQ2SQL不是为了识别您正在尝试做什么而构建的。创建外键时,可以用文字表示,父项有多个子项。父表具有主键,子表具有指向该主键(外键)的指针。你是如何设置这是相反的。在您的情况下,您链接的不是完整的主键,而是主键的一部分,它提供了足够的信息来反转关系

我理解您需要从多个表链接translations表的问题,因此我通常主张在这里进行重新设计。因为它似乎做什么,你正在寻找,我会保存另一个线程。我的建议是将您自己的属性添加到类中,并删除设计器中的关联

您可以在设计器中的任意位置单击鼠标右键并选择“查看代码”,然后手动添加属性:

namespace MyNamespace
{
    // put your using statements inside the namespace for this file!!!

    partial class Item
    {
        public IQueryable<Translation> Translations
        {
            MyDataContext dc = new MyDataContext();
            return dc.Translations.Where(t => t.Id == this.translationId);
        }
    }
}
名称空间MyNamespace
{
//将using语句放入此文件的命名空间中!!!
部分类项目
   {
公开易读翻译
       {
MyDataContext dc=新的MyDataContext();
返回dc.Translations.Where(t=>t.Id==this.translationId);
       }
   }
}

对不起,我在原来的帖子中犯了一个错误,翻译表的Id和语言都是PKs。此外,多个表引用此表进行翻译。但由于空差异,关联失败是没有意义的。外键允许为null,这只是意味着该项没有翻译。您能发布您收到的确切错误消息吗?我必须指出,如果只有唯一的值
Translation.Id
而不是完整的主键就足够了,那么它也没有意义。数据库上的外键将无法直接链接到Id,您还必须包含该语言。不过,我不确定这是否与LINQ2SQL问题有关。准确的错误信息将大有帮助。